1 /* 2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javafx.scene.control.test.tabpane; 27 28 import javafx.beans.value.ChangeListener; 29 import javafx.beans.value.ObservableValue; 30 import javafx.event.ActionEvent; 31 import javafx.event.Event; 32 import javafx.event.EventHandler; 33 import javafx.geometry.Side; 34 import javafx.scene.Scene; 35 import javafx.scene.control.Button; 36 import javafx.scene.control.ChoiceBox; 37 import javafx.scene.control.ContextMenu; 38 import javafx.scene.control.Label; 39 import javafx.scene.control.ListView; 40 import javafx.scene.control.MenuItem; 41 import javafx.scene.control.Tab; 42 import javafx.scene.control.TabPane; 43 import javafx.scene.control.TextField; 44 import javafx.scene.control.Tooltip; 45 import javafx.scene.layout.HBox; 46 import javafx.scene.layout.Pane; 47 import javafx.scene.layout.VBox; 48 import test.javaclient.shared.InteroperabilityApp; 49 import test.javaclient.shared.Utils; 50 51 public class TabPaneApp2 extends InteroperabilityApp { 52 53 public final static String TEST_PANE_ID = "TestPane"; 54 public final static String CLEAR_BTN_ID = "Clear"; 55 public final static String RESET_BTN_ID = "Reset"; 56 public final static String ADD_SINGLE_BTN_ID = "Add single item"; 57 public final static String ADD_SINGLE_AT_POS_BTN_ID = "Add single item at pos"; 58 public final static String DISABLE_SINGLE_AT_POS_BTN_ID = "Disable single item at pos"; 59 public final static String REMOVE_SINGLE_AT_POS_BTN_ID = "Remove single item at pos"; 60 public final static String REMOVE_POS_EDIT_ID = "Remove at pos"; 61 public final static String ADD_POS_EDIT_ID = "Add at pos"; 62 public final static String DISABLE_POS_EDIT_ID = "Disable at pos"; 63 public final static String LAST_SELECTED_ID = "Last selected"; 64 public final static String SHOWN_CHECK_ID = "Shown"; 65 public final static String SHOWING_CHECK_ID = "Showing"; 66 public final static String SIDE_CB_ID = "Side"; 67 public final static String ERROR_ID = "Error"; 68 public final static String EVENT_LIST_ID = "Event list"; 69 public final static String TAB_ITEM = "Tab "; 70 public final static int TABS_NUM = 10; 71 72 VBox root; 73 Label last_selected; 74 Label error; 75 ListView<String> eventList; 76 77 public static void main(String[] args) { 78 Utils.launch(TabPaneApp2.class, args); 79 } 80 81 @Override 82 protected Scene getScene() { 83 return new TabPaneAppScene(); 84 } 85 86 public class TabPaneAppScene extends Scene { 87 final TabPane tabPane; 88 89 public TabPaneAppScene() { 90 super(root = new VBox()); 91 92 Utils.addBrowser(this); 93 94 Pane testPane = new Pane(); 95 testPane.setId(TEST_PANE_ID); 96 testPane.setMinSize(600, 400); 97 testPane.setPrefSize(600, 400); 98 testPane.setMaxSize(600, 400); 99 root.getChildren().add(testPane); 100 101 tabPane = new TabPane(); 102 tabPane.setTranslateX(200); 103 tabPane.setTranslateY(150); 104 tabPane.setPrefSize(200, 200); 105 testPane.getChildren().add(tabPane); 106 107 HBox control_pane = new HBox(); 108 root.getChildren().add(control_pane); 109 110 VBox controls = new VBox(5); 111 control_pane.getChildren().add(controls); 112 113 error = new Label(); 114 error.setId(ERROR_ID); 115 116 Button temp; 117 118 temp = new Button(CLEAR_BTN_ID); 119 temp.setId(CLEAR_BTN_ID); 120 temp.setOnAction(new EventHandler<ActionEvent>() { 121 public void handle(ActionEvent t) { 122 tabPane.getTabs().clear(); 123 } 124 }); 125 controls.getChildren().add(temp); 126 127 temp = new Button(RESET_BTN_ID); 128 temp.setId(RESET_BTN_ID); 129 temp.setOnAction(new EventHandler<ActionEvent>() { 130 public void handle(ActionEvent t) { 131 reset(); 132 } 133 }); 134 controls.getChildren().add(temp); 135 136 temp = new Button(ADD_SINGLE_BTN_ID); 137 temp.setId(ADD_SINGLE_BTN_ID); 138 temp.setOnAction(new EventHandler<ActionEvent>() { 139 public void handle(ActionEvent t) { 140 tabPane.getTabs().add(new NamedTab(TAB_ITEM + tabPane.getTabs().size())); 141 } 142 }); 143 controls.getChildren().add(temp); 144 145 HBox add_position_box = new HBox(5); 146 controls.getChildren().add(add_position_box); 147 148 final TextField add_position = new TextField("0"); 149 add_position.setId(ADD_POS_EDIT_ID); 150 151 temp = new Button(ADD_SINGLE_AT_POS_BTN_ID); 152 temp.setId(ADD_SINGLE_AT_POS_BTN_ID); 153 temp.setOnAction(new EventHandler<ActionEvent>() { 154 public void handle(ActionEvent t) { 155 tabPane.getTabs().add(new NamedTab("Tab " + tabPane.getTabs().size())); 156 } 157 }); 158 add_position_box.getChildren().add(temp); 159 160 final Label add_label = new Label("at"); 161 add_position_box.getChildren().add(add_label); 162 163 add_position_box.getChildren().add(add_position); 164 165 166 HBox disable_position_box = new HBox(5); 167 controls.getChildren().add(disable_position_box); 168 169 final TextField disable_position = new TextField("0"); 170 disable_position.setId(DISABLE_POS_EDIT_ID); 171 172 temp = new Button(DISABLE_SINGLE_AT_POS_BTN_ID); 173 temp.setId(DISABLE_SINGLE_AT_POS_BTN_ID); 174 temp.setOnAction(new EventHandler<ActionEvent>() { 175 public void handle(ActionEvent t) { 176 Integer pos = Integer.valueOf(disable_position.getText()); 177 Tab tab = tabPane.getTabs().get(pos.intValue()); 178 tab.setDisable(!tab.isDisable()); 179 } 180 }); 181 disable_position_box.getChildren().add(temp); 182 183 final Label disable_label = new Label("at"); 184 disable_position_box.getChildren().add(disable_label); 185 186 disable_position_box.getChildren().add(disable_position); 187 188 189 HBox remove_position_box = new HBox(5); 190 controls.getChildren().add(remove_position_box); 191 192 final TextField remove_position = new TextField("0"); 193 remove_position.setId(REMOVE_POS_EDIT_ID); 194 195 temp = new Button(REMOVE_SINGLE_AT_POS_BTN_ID); 196 temp.setId(REMOVE_SINGLE_AT_POS_BTN_ID); 197 temp.setOnAction(new EventHandler<ActionEvent>() { 198 public void handle(ActionEvent t) { 199 tabPane.getTabs().remove(Integer.valueOf(remove_position.getText()).intValue()); 200 } 201 }); 202 remove_position_box.getChildren().add(temp); 203 204 final Label remove_label = new Label("at"); 205 remove_position_box.getChildren().add(remove_label); 206 207 remove_position_box.getChildren().add(remove_position); 208 209 final ChoiceBox<Side> cb = new ChoiceBox<Side>(); 210 cb.setId(SIDE_CB_ID); 211 cb.getItems().addAll(Side.values()); 212 cb.getSelectionModel().select(tabPane.getSide()); 213 cb.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { 214 public void changed(ObservableValue ov, Object t, Object t1) { 215 tabPane.setSide(cb.getSelectionModel().getSelectedItem()); 216 } 217 }); 218 219 controls.getChildren().add(cb); 220 221 HBox last_selected_box = new HBox(5); 222 controls.getChildren().add(last_selected_box); 223 224 Label prompt_last_selected = new Label(LAST_SELECTED_ID); 225 last_selected = new Label(); 226 last_selected.setId(LAST_SELECTED_ID); 227 last_selected_box.getChildren().add(prompt_last_selected); 228 last_selected_box.getChildren().add(last_selected); 229 last_selected.setText(String.valueOf(tabPane.getSelectionModel().getSelectedIndex())); 230 231 tabPane.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number> () { 232 public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) { 233 last_selected.setText(t1.toString()); 234 } 235 }); 236 237 controls.getChildren().add(error); 238 239 eventList = new ListView<String>(); 240 eventList.setId(EVENT_LIST_ID); 241 eventList.setMaxSize(320, 170); 242 243 control_pane.getChildren().add(eventList); 244 245 reset(); 246 } 247 248 protected void reset() { 249 tabPane.getTabs().clear(); 250 eventList.getItems().clear(); 251 for (int i = 0; i < TABS_NUM; i++) { 252 Tab tab = new NamedTab("Tab " + i); 253 tab.setTooltip(new Tooltip("Tab " + i)); 254 ContextMenu menu = new ContextMenu(); 255 for (int j = 0; j < 3; j++) { 256 menu.getItems().add(new MenuItem("Tab " + i + " menu item " + j)); 257 } 258 tab.setContextMenu(menu); 259 if (tab.getContextMenu() != menu) { 260 error.setText("tab.setContextMenu() fails"); 261 } 262 tabPane.getTabs().add(tab); 263 } 264 tabPane.setSide(Side.TOP); 265 error.setText(""); 266 } 267 268 class NamedTab extends Tab { 269 public NamedTab(String name) { 270 super(name); 271 Label label = new Label(name + " content"); 272 setContent(label); 273 EventHandler handler = new EventHandler<Event>() { 274 public void handle(Event t) { 275 eventList.getItems().add(((Tab)t.getTarget()).getText()); 276 } 277 }; 278 setOnSelectionChanged(handler); 279 if (getOnSelectionChanged() != handler) { 280 error.setText("tab.setOnSelectionChanged() fails"); 281 } 282 } 283 } 284 } 285 }