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 package javafx.scrollEvent; 26 27 import java.util.HashMap; 28 import javafx.beans.value.ChangeListener; 29 import javafx.beans.value.ObservableValue; 30 import javafx.event.ActionEvent; 31 import javafx.event.EventHandler; 32 import javafx.factory.ControlsFactory; 33 import javafx.factory.NodeFactory; 34 import javafx.factory.Panes; 35 import javafx.factory.Shapes; 36 import javafx.geometry.Pos; 37 import javafx.scene.Node; 38 import javafx.scene.Parent; 39 import javafx.scene.Scene; 40 import javafx.scene.control.Button; 41 import javafx.scene.control.ButtonBuilder; 42 import javafx.scene.control.CheckBox; 43 import javafx.scene.control.ChoiceBox; 44 import javafx.scene.control.ContextMenu; 45 import javafx.scene.control.Label; 46 import javafx.scene.control.MenuItem; 47 import javafx.scene.control.TextField; 48 import javafx.scene.control.TextFieldBuilder; 49 import javafx.scene.input.ContextMenuEvent; 50 import javafx.scene.input.ScrollEvent; 51 import javafx.scene.layout.FlowPane; 52 import javafx.scene.layout.HBox; 53 import javafx.scene.layout.VBox; 54 import javafx.stage.WindowEvent; 55 import test.javaclient.shared.InteroperabilityApp; 56 import test.javaclient.shared.Utils; 57 import static org.junit.Assert.*; 58 59 /** 60 * 61 * @author andrey 62 * @author Alexander Kirov 63 */ 64 public class ScrollEventApp extends InteroperabilityApp { 65 66 public static final String ID_NODE_CHOOSER = "nodeChooser"; 67 public static final String ID_TARGET_NODE = "target"; 68 public static final String EVENT_COME_INDICATOR_TEXT_FIELD_ID = "EVENT_COME_INDICATOR_TEXT_FIELD_ID"; 79 80 private static String LISTENER_TEXT_FIELD_SUFFIX = "_LISTENER_TEXT_FIELD_ID"; 81 82 public static void main(String[] args) { 83 Utils.launch(ScrollEventApp.class, args); 84 } 85 86 public static String getContextMenuOnShownCounterID() { 87 return getListenerTextFieldID(Options.contextMenuOnShown.toString()); 88 } 89 90 @Override 91 protected Scene getScene() { 92 Scene scene = new Scene(getContent(), 700, 300); 93 return scene; 94 } 95 96 private Node createNodeChooser() { 97 VBox vb = new VBox(5); 98 Label scrollEventCame = new Label("Scroll event came : "); 99 final TextField eventComeIndicator = TextFieldBuilder.create().text("None").id(EVENT_COME_INDICATOR_TEXT_FIELD_ID).build(); 100 HBox hb = new HBox(); 101 hb.getChildren().addAll(scrollEventCame, eventComeIndicator); 102 103 Button resetButton = ButtonBuilder.create().text("Reset").id(RESET_BUTTON_ID).build(); 104 resetButton.setOnAction(new EventHandler<ActionEvent>() { 105 106 public void handle(ActionEvent t) { 107 eventComeIndicator.setText("None"); 108 clearListenersState(); 109 } 110 }); 111 112 ChoiceBox<NodeFactory> cb = new ChoiceBox<NodeFactory>(); 113 cb.setId(ID_NODE_CHOOSER); 114 cb.getItems().addAll(ControlsFactory.filteredValues()); 115 cb.getItems().addAll(Shapes.values()); 116 cb.getItems().addAll(Panes.values()); 117 118 cb.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<NodeFactory>() { 119 120 @Override 121 public void changed(ObservableValue<? extends NodeFactory> ov, NodeFactory t, NodeFactory t1) { 122 final Node node = t1.createNode(); 123 124 if (!enableContextMenuTest.isSelected()) { 125 node.setOnScroll(new EventHandler<ScrollEvent>() { 126 127 public void handle(ScrollEvent t) { 128 eventComeIndicator.setText(COME_EVENT_INDICATION); 129 130 renewListenerValue("deltaX", t.getDeltaX()); 131 renewListenerValue("deltaY", t.getDeltaY()); 132 renewListenerValue("textDeltaX", t.getTextDeltaX()); 133 renewListenerValue("textDeltaY", t.getTextDeltaY()); 134 renewListenerValue("textDeltaXUnits", t.getTextDeltaXUnits()); 135 renewListenerValue("textDeltaYUnits", t.getTextDeltaYUnits()); 136 renewListenerValue("eventType", t.getEventType()); 137 renewListenerValue("consumed", t.isConsumed()); 138 renewListenerValue("x", t.getX()); 139 renewListenerValue("y", t.getY()); 140 } 141 }); 142 } else { 143 node.setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() { 144 public void handle(ContextMenuEvent t) { 145 renewListenerValue("eventType", t.getEventType()); 146 renewListenerValue("consumed", t.isConsumed()); 147 renewListenerValue("x", t.getX()); 148 renewListenerValue("y", t.getY()); 149 getContextMenu().show(node, t.getScreenX(), t.getScreenY()); 150 t.consume(); 151 } 152 }); 153 } 154 155 node.setId(ID_TARGET_NODE); 156 spaceForNode.getChildren().clear(); 157 spaceForNode.getChildren().add(node); 158 159 clearListenersState(); 160 } 161 }); 162 163 vb.getChildren().addAll(new Label("Choose tested control : "), cb, resetButton, hb); 164 return vb; 165 } 166 167 private Parent getContent() { 168 hm = new HashMap<String, TextField>(); 169 170 spaceForNode = new VBox(); 171 spaceForNode.setAlignment(Pos.CENTER); 172 spaceForNode.setPrefWidth(300); 173 spaceForNode.setPrefHeight(300); 174 175 spaceForListeners = new FlowPane(); 176 spaceForListeners.setPrefHeight(300); 177 spaceForListeners.setPrefWidth(300); 178 for (Options s : Options.values()) { 179 spaceForListeners.getChildren().add(getListener(s.toString())); 180 } 181 182 enableContextMenuTest = new CheckBox("Context menu test"); 183 enableContextMenuTest.setId(ENABLE_CONTEXT_MENU_CHECK_BOX_ID); 184 185 VBox controls = new VBox(); 186 controls.setAlignment(Pos.CENTER); 187 controls.getChildren().add(enableContextMenuTest); 188 controls.getChildren().add(createNodeChooser()); 189 190 HBox hBox = new HBox(); 191 hBox.setAlignment(Pos.CENTER); 192 hBox.getChildren().addAll(spaceForNode, spaceForListeners, controls); 193 return hBox; 194 } 195 196 private HBox getListener(String name) { 197 HBox hb = new HBox(); 198 Label label = new Label(name + " : "); 199 TextField tf = TextFieldBuilder.create().id(getListenerTextFieldID(name)).build(); 200 hm.put(name, tf); 201 202 hb.getChildren().addAll(label, tf); 203 return hb; 204 } 205 206 private void renewListenerValue(String name, Object newValue) { 207 TextField tf = hm.get(name); 208 if (tf != null) { 209 tf.setText(newValue.toString()); 210 } 211 } 212 213 private void clearListenersState() { 214 for (TextField tf : hm.values()) { 215 tf.setText(""); 216 } 217 } 218 219 private void initContextMenu() { | 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 package javafx.scrollEvent; 26 27 import java.util.HashMap; 28 import javafx.beans.value.ChangeListener; 29 import javafx.beans.value.ObservableValue; 30 import javafx.event.ActionEvent; 31 import javafx.event.EventHandler; 32 import javafx.factory.ControlsFactory; 33 import javafx.factory.NodeFactory; 34 import javafx.factory.Panes; 35 import javafx.factory.Shapes; 36 import javafx.geometry.Pos; 37 import javafx.scene.Node; 38 import javafx.scene.Parent; 39 import javafx.scene.Scene; 40 import javafx.scene.control.Button; 41 import javafx.scene.control.CheckBox; 42 import javafx.scene.control.ChoiceBox; 43 import javafx.scene.control.ComboBox; 44 import javafx.scene.control.ContextMenu; 45 import javafx.scene.control.Control; 46 import javafx.scene.control.DatePicker; 47 import javafx.scene.control.Label; 48 import javafx.scene.control.MenuItem; 49 import javafx.scene.control.TextField; 50 import javafx.scene.input.ContextMenuEvent; 51 import javafx.scene.input.ScrollEvent; 52 import javafx.scene.layout.FlowPane; 53 import javafx.scene.layout.HBox; 54 import javafx.scene.layout.VBox; 55 import javafx.stage.WindowEvent; 56 import test.javaclient.shared.InteroperabilityApp; 57 import test.javaclient.shared.Utils; 58 import static org.junit.Assert.*; 59 60 /** 61 * 62 * @author andrey 63 * @author Alexander Kirov 64 */ 65 public class ScrollEventApp extends InteroperabilityApp { 66 67 public static final String ID_NODE_CHOOSER = "nodeChooser"; 68 public static final String ID_TARGET_NODE = "target"; 69 public static final String EVENT_COME_INDICATOR_TEXT_FIELD_ID = "EVENT_COME_INDICATOR_TEXT_FIELD_ID"; 80 81 private static String LISTENER_TEXT_FIELD_SUFFIX = "_LISTENER_TEXT_FIELD_ID"; 82 83 public static void main(String[] args) { 84 Utils.launch(ScrollEventApp.class, args); 85 } 86 87 public static String getContextMenuOnShownCounterID() { 88 return getListenerTextFieldID(Options.contextMenuOnShown.toString()); 89 } 90 91 @Override 92 protected Scene getScene() { 93 Scene scene = new Scene(getContent(), 700, 300); 94 return scene; 95 } 96 97 private Node createNodeChooser() { 98 VBox vb = new VBox(5); 99 Label scrollEventCame = new Label("Scroll event came : "); 100 final TextField eventComeIndicator = new TextField("None"); 101 eventComeIndicator.setId(EVENT_COME_INDICATOR_TEXT_FIELD_ID); 102 HBox hb = new HBox(); 103 hb.getChildren().addAll(scrollEventCame, eventComeIndicator); 104 105 Button resetButton = new Button("Reset"); 106 resetButton.setId(RESET_BUTTON_ID); 107 resetButton.setOnAction(new EventHandler<ActionEvent>() { 108 public void handle(ActionEvent t) { 109 eventComeIndicator.setText("None"); 110 clearListenersState(); 111 } 112 }); 113 114 ChoiceBox<NodeFactory> cb = new ChoiceBox<NodeFactory>(); 115 cb.setId(ID_NODE_CHOOSER); 116 cb.getItems().addAll(ControlsFactory.filteredValues()); 117 cb.getItems().addAll(Shapes.values()); 118 cb.getItems().addAll(Panes.values()); 119 120 cb.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<NodeFactory>() { 121 122 @Override 123 public void changed(ObservableValue<? extends NodeFactory> ov, NodeFactory t, NodeFactory t1) { 124 final Node node = t1.createNode(); 125 126 if (!enableContextMenuTest.isSelected()) { 127 node.setOnScroll(new EventHandler<ScrollEvent>() { 128 129 public void handle(ScrollEvent t) { 130 eventComeIndicator.setText(COME_EVENT_INDICATION); 131 132 renewListenerValue("deltaX", t.getDeltaX()); 133 renewListenerValue("deltaY", t.getDeltaY()); 134 renewListenerValue("textDeltaX", t.getTextDeltaX()); 135 renewListenerValue("textDeltaY", t.getTextDeltaY()); 136 renewListenerValue("textDeltaXUnits", t.getTextDeltaXUnits()); 137 renewListenerValue("textDeltaYUnits", t.getTextDeltaYUnits()); 138 renewListenerValue("eventType", t.getEventType()); 139 renewListenerValue("consumed", t.isConsumed()); 140 renewListenerValue("x", t.getX()); 141 renewListenerValue("y", t.getY()); 142 } 143 }); 144 } else { 145 EventHandler<ContextMenuEvent> handler = new EventHandler<ContextMenuEvent>() { 146 public void handle(ContextMenuEvent t) { 147 renewListenerValue("eventType", t.getEventType()); 148 renewListenerValue("consumed", t.isConsumed()); 149 renewListenerValue("x", t.getX()); 150 renewListenerValue("y", t.getY()); 151 getContextMenu().show(node, t.getScreenX(), t.getScreenY()); 152 t.consume(); 153 } 154 }; 155 node.setOnContextMenuRequested(handler); 156 TextField editor = null; 157 if (node instanceof DatePicker) { 158 editor = ((DatePicker)node).getEditor(); 159 } 160 if (node instanceof ComboBox) { 161 editor = ((ComboBox)node).getEditor(); 162 } 163 if (editor != null) { 164 editor.setOnContextMenuRequested(handler); 165 } 166 } 167 168 node.setId(ID_TARGET_NODE); 169 spaceForNode.getChildren().clear(); 170 spaceForNode.getChildren().add(node); 171 node.setPickOnBounds(true); 172 if (node instanceof Control) { 173 ((Control)node).setPrefWidth(200); 174 ((Control)node).setPrefHeight(200); 175 ((Control)node).setMinWidth(200); 176 ((Control)node).setMinHeight(200); 177 } 178 clearListenersState(); 179 } 180 }); 181 182 vb.getChildren().addAll(new Label("Choose tested control : "), cb, resetButton, hb); 183 return vb; 184 } 185 186 private Parent getContent() { 187 hm = new HashMap<String, TextField>(); 188 189 spaceForNode = new VBox(); 190 spaceForNode.setAlignment(Pos.CENTER); 191 spaceForNode.setPrefWidth(300); 192 spaceForNode.setPrefHeight(300); 193 194 spaceForListeners = new FlowPane(); 195 spaceForListeners.setPrefHeight(300); 196 spaceForListeners.setPrefWidth(300); 197 for (Options s : Options.values()) { 198 spaceForListeners.getChildren().add(getListener(s.toString())); 199 } 200 201 enableContextMenuTest = new CheckBox("Context menu test"); 202 enableContextMenuTest.setId(ENABLE_CONTEXT_MENU_CHECK_BOX_ID); 203 204 VBox controls = new VBox(); 205 controls.setAlignment(Pos.CENTER); 206 controls.getChildren().add(enableContextMenuTest); 207 controls.getChildren().add(createNodeChooser()); 208 209 HBox hBox = new HBox(); 210 hBox.setAlignment(Pos.CENTER); 211 hBox.getChildren().addAll(spaceForNode, spaceForListeners, controls); 212 return hBox; 213 } 214 215 private HBox getListener(String name) { 216 HBox hb = new HBox(); 217 Label label = new Label(name + " : "); 218 TextField tf = new TextField(); 219 tf.setId(getListenerTextFieldID(name)); 220 hm.put(name, tf); 221 222 hb.getChildren().addAll(label, tf); 223 return hb; 224 } 225 226 private void renewListenerValue(String name, Object newValue) { 227 TextField tf = hm.get(name); 228 if (tf != null) { 229 tf.setText(newValue.toString()); 230 } 231 } 232 233 private void clearListenersState() { 234 for (TextField tf : hm.values()) { 235 tf.setText(""); 236 } 237 } 238 239 private void initContextMenu() { |