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.ButtonBuilder; 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 controls.getChildren().add( 117 ButtonBuilder.create() 118 .text(CLEAR_BTN_ID).id(CLEAR_BTN_ID) 119 .onAction(new EventHandler<ActionEvent>() { 120 public void handle(ActionEvent t) { 121 tabPane.getTabs().clear(); 122 } 123 }).build()); 124 125 controls.getChildren().add( 126 ButtonBuilder.create() 127 .text(RESET_BTN_ID).id(RESET_BTN_ID) 128 .onAction(new EventHandler<ActionEvent>() { 129 130 public void handle(ActionEvent t) { 131 reset(); 132 } 133 }).build()); 134 135 controls.getChildren().add( 136 ButtonBuilder.create() 137 .text(ADD_SINGLE_BTN_ID).id(ADD_SINGLE_BTN_ID) 138 .onAction(new EventHandler<ActionEvent>() { 139 140 public void handle(ActionEvent t) { 141 tabPane.getTabs().add(new NamedTab(TAB_ITEM + tabPane.getTabs().size())); 142 } 143 }).build()); 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 add_position_box.getChildren().add( 152 ButtonBuilder.create() 153 .text(ADD_SINGLE_AT_POS_BTN_ID).id(ADD_SINGLE_AT_POS_BTN_ID) 154 .onAction(new EventHandler<ActionEvent>() { 155 156 public void handle(ActionEvent t) { 157 tabPane.getTabs().add(new NamedTab("Tab " + tabPane.getTabs().size())); 158 } 159 }).build()); 160 161 final Label add_label = new Label("at"); 162 add_position_box.getChildren().add(add_label); 163 164 add_position_box.getChildren().add(add_position); 165 166 167 HBox disable_position_box = new HBox(5); 168 controls.getChildren().add(disable_position_box); 169 170 final TextField disable_position = new TextField("0"); 171 disable_position.setId(DISABLE_POS_EDIT_ID); 172 173 disable_position_box.getChildren().add( 174 ButtonBuilder.create() 175 .text(DISABLE_SINGLE_AT_POS_BTN_ID).id(DISABLE_SINGLE_AT_POS_BTN_ID) 176 .onAction(new EventHandler<ActionEvent>() { 177 178 public void handle(ActionEvent t) { 179 Integer pos = Integer.valueOf(disable_position.getText()); 180 Tab tab = tabPane.getTabs().get(pos.intValue()); 181 tab.setDisable(!tab.isDisable()); 182 } 183 }).build()); 184 185 final Label disable_label = new Label("at"); 186 disable_position_box.getChildren().add(disable_label); 187 188 disable_position_box.getChildren().add(disable_position); 189 190 191 HBox remove_position_box = new HBox(5); 192 controls.getChildren().add(remove_position_box); 193 194 final TextField remove_position = new TextField("0"); 195 remove_position.setId(REMOVE_POS_EDIT_ID); 196 197 remove_position_box.getChildren().add( 198 ButtonBuilder.create() 199 .text(REMOVE_SINGLE_AT_POS_BTN_ID).id(REMOVE_SINGLE_AT_POS_BTN_ID) 200 .onAction(new EventHandler<ActionEvent>() { 201 202 public void handle(ActionEvent t) { 203 tabPane.getTabs().remove(Integer.valueOf(remove_position.getText()).intValue()); 204 } 205 }).build()); 206 207 final Label remove_label = new Label("at"); 208 remove_position_box.getChildren().add(remove_label); 209 210 remove_position_box.getChildren().add(remove_position); 211 212 final ChoiceBox<Side> cb = new ChoiceBox<Side>(); 213 cb.setId(SIDE_CB_ID); 214 cb.getItems().addAll(Side.values()); 215 cb.getSelectionModel().select(tabPane.getSide()); 216 cb.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { 217 public void changed(ObservableValue ov, Object t, Object t1) { 218 tabPane.setSide(cb.getSelectionModel().getSelectedItem()); 219 } 220 }); 221 222 controls.getChildren().add(cb); 223 224 HBox last_selected_box = new HBox(5); 225 controls.getChildren().add(last_selected_box); 226 227 Label prompt_last_selected = new Label(LAST_SELECTED_ID); 228 last_selected = new Label(); 229 last_selected.setId(LAST_SELECTED_ID); 230 last_selected_box.getChildren().add(prompt_last_selected); 231 last_selected_box.getChildren().add(last_selected); 232 last_selected.setText(String.valueOf(tabPane.getSelectionModel().getSelectedIndex())); 233 234 tabPane.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number> () { 235 public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) { 236 last_selected.setText(t1.toString()); 237 } 238 }); 239 240 controls.getChildren().add(error); 241 242 eventList = new ListView<String>(); 243 eventList.setId(EVENT_LIST_ID); 244 eventList.setMaxSize(320, 170); 245 246 control_pane.getChildren().add(eventList); 247 248 reset(); 249 } 250 251 protected void reset() { 252 tabPane.getTabs().clear(); 253 eventList.getItems().clear(); 254 for (int i = 0; i < TABS_NUM; i++) { 255 Tab tab = new NamedTab("Tab " + i); 256 tab.setTooltip(new Tooltip("Tab " + i)); 257 ContextMenu menu = new ContextMenu(); 258 for (int j = 0; j < 3; j++) { 259 menu.getItems().add(new MenuItem("Tab " + i + " menu item " + j)); 260 } 261 tab.setContextMenu(menu); 262 if (tab.getContextMenu() != menu) { 263 error.setText("tab.setContextMenu() fails"); 264 } 265 tabPane.getTabs().add(tab); 266 } 267 tabPane.setSide(Side.TOP); 268 error.setText(""); 269 } 270 271 class NamedTab extends Tab { 272 public NamedTab(String name) { 273 super(name); 274 Label label = new Label(name + " content"); 275 setContent(label); 276 EventHandler handler = new EventHandler<Event>() { 277 public void handle(Event t) { 278 eventList.getItems().add(((Tab)t.getTarget()).getText()); 279 } 280 }; 281 setOnSelectionChanged(handler); 282 if (getOnSelectionChanged() != handler) { 283 error.setText("tab.setOnSelectionChanged() fails"); 284 } 285 } 286 } 287 } 288 }