List of usage examples for javafx.scene.input KeyCode ENTER
KeyCode ENTER
To view the source code for javafx.scene.input KeyCode ENTER.
Click Source Link
From source file:com.heliosdecompiler.helios.gui.controller.FileTreeController.java
@FXML public void initialize() { this.rootItem = new TreeItem<>(new TreeNode("[root]")); this.root.setRoot(this.rootItem); this.root.setCellFactory(new TreeCellFactory<>(node -> { if (node.getParent() == null) { ContextMenu export = new ContextMenu(); MenuItem exportItem = new MenuItem("Export"); export.setOnAction(e -> { File file = messageHandler.chooseFile().withInitialDirectory(new File(".")) .withTitle(Message.GENERIC_CHOOSE_EXPORT_LOCATION_JAR.format()) .withExtensionFilter(new FileFilter(Message.FILETYPE_JAVA_ARCHIVE.format(), "*.jar"), true)//from w w w .ja v a2s . c o m .promptSave(); OpenedFile openedFile = (OpenedFile) node.getMetadata().get(OpenedFile.OPENED_FILE); Map<String, byte[]> clone = new HashMap<>(openedFile.getContents()); backgroundTaskHelper.submit( new BackgroundTask(Message.TASK_SAVING_FILE.format(node.getDisplayName()), true, () -> { try { if (!file.exists()) { if (!file.createNewFile()) { throw new IOException("Could not create export file"); } } try (ZipOutputStream zipOutputStream = new ZipOutputStream( new FileOutputStream(file))) { for (Map.Entry<String, byte[]> ent : clone.entrySet()) { ZipEntry zipEntry = new ZipEntry(ent.getKey()); zipOutputStream.putNextEntry(zipEntry); zipOutputStream.write(ent.getValue()); zipOutputStream.closeEntry(); } } messageHandler.handleMessage(Message.GENERIC_EXPORTED.format()); } catch (IOException ex) { messageHandler.handleException(Message.ERROR_IOEXCEPTION_OCCURRED.format(), ex); } })); }); export.getItems().add(exportItem); return export; } return null; })); root.addEventHandler(KeyEvent.KEY_RELEASED, event -> { if (event.getCode() == KeyCode.ENTER) { TreeItem<TreeNode> selected = this.root.getSelectionModel().getSelectedItem(); if (selected != null) { if (selected.getChildren().size() != 0) { selected.setExpanded(!selected.isExpanded()); } else { getParentController().getAllFilesViewerController().handleClick(selected.getValue()); } } } }); Tooltip tooltip = new Tooltip(); StringBuilder search = new StringBuilder(); List<TreeItem<TreeNode>> searchContext = new ArrayList<>(); AtomicInteger searchIndex = new AtomicInteger(); root.focusedProperty().addListener((observable, oldValue, newValue) -> { if (!newValue) { tooltip.hide(); search.setLength(0); } }); root.boundsInLocalProperty().addListener((observable, oldValue, newValue) -> { Bounds bounds = root.localToScreen(newValue); tooltip.setAnchorX(bounds.getMinX()); tooltip.setAnchorY(bounds.getMinY()); }); root.addEventHandler(KeyEvent.KEY_PRESSED, event -> { if (tooltip.isShowing() && event.getCode() == KeyCode.UP) { if (searchIndex.decrementAndGet() < 0) { searchIndex.set(searchContext.size() - 1); } } else if (tooltip.isShowing() && event.getCode() == KeyCode.DOWN) { if (searchIndex.incrementAndGet() >= searchContext.size()) { searchIndex.set(0); } } else { return; } event.consume(); root.scrollTo(root.getRow(searchContext.get(searchIndex.get()))); root.getSelectionModel().select(searchContext.get(searchIndex.get())); }); root.addEventHandler(KeyEvent.KEY_TYPED, event -> { if (event.getCharacter().charAt(0) == '\b') { if (search.length() > 0) { search.setLength(search.length() - 1); } } else if (event.getCharacter().charAt(0) == '\u001B') { //esc tooltip.hide(); search.setLength(0); return; } else if (search.length() > 0 || (search.length() == 0 && StringUtils.isAlphanumeric(event.getCharacter()))) { search.append(event.getCharacter()); if (!tooltip.isShowing()) { tooltip.show(root.getScene().getWindow()); } } if (!tooltip.isShowing()) return; String str = search.toString(); tooltip.setText("Search for: " + str); searchContext.clear(); ArrayDeque<TreeItem<TreeNode>> deque = new ArrayDeque<>(); deque.addAll(rootItem.getChildren()); while (!deque.isEmpty()) { TreeItem<TreeNode> item = deque.poll(); if (item.getValue().getDisplayName().contains(str)) { searchContext.add(item); } if (item.isExpanded() && item.getChildren().size() > 0) deque.addAll(item.getChildren()); } searchIndex.set(0); if (searchContext.size() > 0) { root.scrollTo(root.getRow(searchContext.get(0))); root.getSelectionModel().select(searchContext.get(0)); } }); openedFileController.loadedFiles().addListener((MapChangeListener<String, OpenedFile>) change -> { if (change.getValueAdded() != null) { updateTree(change.getValueAdded()); } if (change.getValueRemoved() != null) { this.rootItem.getChildren() .removeIf(ti -> ti.getValue().equals(change.getValueRemoved().getRoot())); } }); }
From source file:account.management.controller.NewVoucherController.java
@Override public void initialize(URL url, ResourceBundle rb) { Platform.runLater(() -> {//from ww w . j a v a 2 s.c om onAddNewFieldButtonClick(null); }); account_list = FXCollections.observableArrayList(); filter_party_rec = FXCollections.observableArrayList(); filter_party_pay = FXCollections.observableArrayList(); new AutoCompleteComboBoxListener<>(select_voucher_type); select_voucher_type.setOnHiding((e) -> { VoucherType a = select_voucher_type.getSelectionModel().getSelectedItem(); select_voucher_type.setEditable(false); select_voucher_type.getSelectionModel().select(a); }); select_voucher_type.setOnShowing((e) -> { select_voucher_type.setEditable(true); }); new AutoCompleteComboBoxListener<>(select_location); select_location.setOnHiding((e) -> { Location a = select_location.getSelectionModel().getSelectedItem(); select_location.setEditable(false); select_location.getSelectionModel().select(a); }); select_location.setOnShowing((e) -> { select_location.setEditable(true); }); new AutoCompleteComboBoxListener<>(select_type); select_type.setOnHiding((e) -> { Project a = select_type.getSelectionModel().getSelectedItem(); select_type.setEditable(false); select_type.getSelectionModel().select(a); }); select_type.setOnShowing((e) -> { select_type.setEditable(true); }); new Thread(() -> { try { Thread.sleep(5000); this.button_submit.getScene().setOnKeyPressed(new EventHandler<KeyEvent>() { public void handle(final KeyEvent keyEvent) { if (keyEvent.getCode() == KeyCode.ENTER) { System.out.println("attempting to submit new voucher"); //Stop letting it do anything else keyEvent.consume(); onSubmitButtonClick(null); } } }); } catch (InterruptedException ex) { Logger.getLogger(NewVoucherController.class.getName()).log(Level.SEVERE, null, ex); } }).start(); /* * voucher type */ new Thread(() -> { try { HttpResponse<JsonNode> res = Unirest.get(MetaData.baseUrl + "get/voucher/type").asJson(); JSONArray type = res.getBody().getArray(); for (int i = 0; i < type.length(); i++) { JSONObject obj = type.getJSONObject(i); int id = Integer.parseInt(obj.get("id").toString()); String name = obj.get("type_name").toString(); String note = obj.get("details").toString(); this.select_voucher_type.getItems().add(new VoucherType(id, name, note)); } } catch (UnirestException ex) { Logger.getLogger(NewVoucherController.class.getName()).log(Level.SEVERE, null, ex); } }).start(); /* * init locations in select_location combobox */ locations = FXCollections.observableArrayList(); new Thread(() -> { try { HttpResponse<JsonNode> response = Unirest.get(MetaData.baseUrl + "get/locations").asJson(); JSONArray location_array = response.getBody().getArray(); for (int i = 0; i < location_array.length() - 1; i++) { String name = location_array.getJSONObject(i).getString("name"); String details = location_array.getJSONObject(i).getString("details"); int id = location_array.getJSONObject(i).getInt("id"); locations.add(new Location(id, name, details)); } select_location.getItems().addAll(locations); } catch (UnirestException ex) { System.out.println("exception in UNIREST"); } }).start(); this.button_submit.setDisable(true); field_container.setOnKeyReleased((KeyEvent event) -> { validateFields(); }); ToggleGroup tg = new ToggleGroup(); this.project.setToggleGroup(tg); this.lc.setToggleGroup(tg); this.cnf.setToggleGroup(tg); /* * init account name */ new Thread(() -> { final ComboBox<Account> a = (ComboBox<Account>) this.field_row.getChildren().get(0); try { HttpResponse<JsonNode> response = Unirest.get(MetaData.baseUrl + "get/accounts").asJson(); JSONArray account = response.getBody().getArray(); for (int i = 1; i < account.length(); i++) { JSONObject obj = account.getJSONObject(i); int id = Integer.parseInt(obj.get("id").toString()); String name = obj.get("name").toString(); String desc = obj.get("description").toString(); int parent_id = Integer.parseInt(obj.get("parent").toString()); account_list .add(new Account(id, name, parent_id, desc, 0f, obj.get("account_type").toString())); if (parent_id == 21) { this.filter_party_rec.add( new Account(id, name, parent_id, desc, 0f, obj.get("account_type").toString())); } if (parent_id == 34) { this.filter_party_pay.add( new Account(id, name, parent_id, desc, 0f, obj.get("account_type").toString())); } } a.getItems().addAll(account_list); } catch (UnirestException ex) { Logger.getLogger(NewVoucherController.class.getName()).log(Level.SEVERE, null, ex); } finally { new AutoCompleteComboBoxListener<>(a); a.setOnHiding((e) -> { Account acc = a.getSelectionModel().getSelectedItem(); a.setEditable(false); a.getSelectionModel().select(acc); }); a.setOnShowing((e) -> { a.setEditable(true); }); a.setOnAction((e) -> { if (!a.getSelectionModel().isEmpty() && a.getSelectionModel().getSelectedItem().getId() == 21) { a.setPromptText("Select Party"); a.getItems().clear(); a.getItems().addAll(this.filter_party_rec); } if (!a.getSelectionModel().isEmpty() && a.getSelectionModel().getSelectedItem().getId() == 34) { a.getItems().clear(); a.getItems().addAll(this.filter_party_pay); a.setPromptText("Select Party"); } }); } }).start(); }
From source file:com.anavationllc.o2jb.ConfigurationApp.java
private EventHandler<KeyEvent> getKeyEventHandler() { if (keyEventHandler == null) { keyEventHandler = new EventHandler<KeyEvent>() { @Override/* w ww . ja v a2s . co m*/ public void handle(KeyEvent keyEvent) { if (keyEvent.getCode() == KeyCode.ENTER) { if (canSubmit()) { keyEvent.consume(); okBtn.fire(); } } else if (keyEvent.getCode() == KeyCode.ESCAPE) { keyEvent.consume(); cancelBtn.fire(); } else { okBtn.setDisable(!canSubmit()); } } }; } return keyEventHandler; }
From source file:ninja.eivind.hotsreplayuploader.window.nodes.HotsLogsNode.java
private void setPlayerSearchActions() { playerSearchInput.setOnKeyPressed(event -> { if (event.getCode() == KeyCode.ENTER) { doPlayerSearch(); } }); }
From source file:pah9qdmoviereviews.MovieReviewsFXMLController.java
public void ready(Stage stage, Scene scene) { this.stage = stage; this.scene = scene; movieReviewManager = new NYTMoviewReviewManager(); movieReviewManager.addPropertyChangeSupport(((evt) -> { switch (evt.getPropertyName()) { case "Exception": Platform.runLater(() -> displayExceptionAlert((Exception) evt.getNewValue())); break; case "Add Movie Review": Platform.runLater(() -> { movieReviews.add((NYTMovieReview) evt.getNewValue()); this.foundText.setText(("Found " + movieReviews.size() + " results for " + searchString + ".")); });/*from w ww. jav a 2 s. c o m*/ break; case "Clear Movie Reviews": Platform.runLater(() -> movieReviews.clear()); break; case "Completed": if (movieReviews.isEmpty()) this.foundText.setText("No reviews found for " + searchString); break; default: Platform.runLater( () -> displayExceptionAlert(new Exception("Invalid Property Change Support Property"))); break; } })); movieReviews = FXCollections.observableArrayList(); listView.setItems(movieReviews); listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<NYTMovieReview>() { @Override public void changed(ObservableValue<? extends NYTMovieReview> observable, NYTMovieReview oldValue, NYTMovieReview newValue) { detailsBox.getChildren().clear(); movieImage.setImage(null); if (newValue != null) { DateFormat dateFormat = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); String pictureLink = newValue.getPictureLink(); if (pictureLink != null && !pictureLink.isEmpty()) { reviewBox.getChildren().remove(0); reviewBox.getChildren().add(0, movieImage); movieImage.setImage(new Image(pictureLink)); } else { reviewBox.getChildren().remove(0); reviewBox.getChildren().add(0, missingImageText); movieImage.setImage(null); } ArrayList<Label> labelArray = new ArrayList<>(); if (!newValue.getDisplayTitle().isEmpty()) { Label titleLabel = new Label(newValue.getDisplayTitle()); titleLabel.fontProperty().set(Font.font(20)); labelArray.add(titleLabel); } if (!newValue.getSummary().isEmpty()) { labelArray.add(new Label("Summary: " + newValue.getSummary())); } if (!newValue.getMpaaRating().isEmpty()) { labelArray.add(new Label("MPAA Rating: " + newValue.getMpaaRating())); } if (newValue.getPublicationDate() != null) { labelArray.add( new Label("Publication Date: " + dateFormat.format(newValue.getPublicationDate()))); } if (newValue.getOpeningDate() != null) { labelArray.add(new Label("Opening Date: " + dateFormat.format(newValue.getOpeningDate()))); } labelArray.forEach((label) -> { label.wrapTextProperty().set(true); }); detailsBox.getChildren().addAll(labelArray); Button openButton = new Button("Open Review"); openButton.setOnAction((event) -> { try { Desktop.getDesktop().browse(new URI(newValue.getArticleLink())); } catch (Exception ex) { displayExceptionAlert(ex); } }); detailsBox.getChildren().add(openButton); } } }); HBox.setMargin(missingImageText, new Insets(15, 15, 15, 15)); searchTextField.setOnKeyPressed((event) -> { if (event.getCode() == KeyCode.ENTER) { loadReviews(searchTextField.getText()); } }); // searchTextField.textProperty().addListener((observable, oldValue, newValue) -> { // if(newValue != null && !newValue.isEmpty()) // loadReviews(newValue); // }); }
From source file:com.properned.application.SystemController.java
public void initialize() { logger.info("Initialize System controller"); localeButton.disableProperty().bind(multiLanguageProperties.isLoadedProperty().not()); saveButton.disableProperty().bind(multiLanguageProperties.isDirtyProperty().not() .or(multiLanguageProperties.isLoadedProperty().not())); Stage primaryStage = Properned.getInstance().getPrimaryStage(); primaryStage.titleProperty()/* w w w.j a v a 2s . c om*/ .bind(multiLanguageProperties.baseNameProperty() .concat(Bindings.when(multiLanguageProperties.isLoadedProperty()) .then(new SimpleStringProperty(" (") .concat(multiLanguageProperties.parentDirectoryPathProperty()).concat(")")) .otherwise("")) .concat(Bindings.when(multiLanguageProperties.isDirtyProperty()).then(" *").otherwise(""))); FilteredList<String> filteredList = new FilteredList<>(multiLanguageProperties.getListMessageKey(), new Predicate<String>() { @Override public boolean test(String t) { String filter = filterText.getText(); if (filter == null || filter.equals("")) { return true; } return t.contains(filter); } }); SortedList<String> sortedList = new SortedList<>(filteredList, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); messageKeyList.setItems(sortedList); filterText.textProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { // Filter the list filteredList.setPredicate(new Predicate<String>() { @Override public boolean test(String t) { String filter = filterText.getText(); if (filter == null || filter.equals("")) { return true; } return t.contains(filter); } }); // check the add button disabled status if (isKeyCanBeAdded(newValue)) { addButton.setDisable(false); } else { addButton.setDisable(true); } } }); ChangeListener<String> changeMessageListener = new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { logger.info("Message key selection changed : " + newValue); valueList.setItems(FXCollections.observableArrayList()); valueList.setItems(FXCollections .observableArrayList(multiLanguageProperties.getMapPropertiesByLocale().keySet())); } }; messageKeyList.getSelectionModel().selectedItemProperty().addListener(changeMessageListener); messageKeyList.setCellFactory(c -> new MessageKeyListCell(multiLanguageProperties)); valueList.setCellFactory(c -> new ValueListCell(multiLanguageProperties, messageKeyList)); filterText.setOnKeyReleased(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent event) { if (event.getCode() == KeyCode.DOWN) { messageKeyList.requestFocus(); event.consume(); } else if (event.getCode() == KeyCode.ENTER) { addKey(); event.consume(); } } }); }
From source file:de.ks.text.AsciiDocEditor.java
@Override public void initialize(URL location, ResourceBundle resources) { initializePreview();// w w w. j a v a2 s. co m initializePopupPreview(); renderGroup = new LastExecutionGroup<>("adocrender", 500, controller.getExecutorService()); text.bindBidirectional(editor.textProperty()); editor.textProperty().addListener((p, o, n) -> { if (n != null) { renderGroup.schedule(() -> n)// .thenApplyAsync(s -> { storeBack(s); return s; }, controller.getExecutorService())// .thenAcceptAsync(s -> { if (previewTab.isSelected()) { preview.clear(); preview.showDirect(s); } else { preview.preload( Collections.singletonList(new AsciiDocContent(AsciiDocViewer.DEFAULT, s))); } if (previewPopupStage != null) { popupPreview.clear(); popupPreview.showDirect(s); } }, controller.getJavaFXExecutor()); } }); tabPane.focusedProperty().addListener((p, o, n) -> { if (n) { if (tabPane.getSelectionModel().getSelectedIndex() == 0) { if (focusOnEditor) { editor.requestFocus(); } } } else { focusOnEditor = true; } }); tabPane.getSelectionModel().selectedIndexProperty().addListener((p, o, n) -> { if (n != null && n.intValue() == 1) { controller.getJavaFXExecutor().submit(() -> preview.requestFocus()); preview.show(new AsciiDocContent(AsciiDocViewer.DEFAULT, editor.getText())); } if (o == null || n == null) { return; } if (o.intValue() != 0 && n.intValue() == 0) { controller.getJavaFXExecutor().submit(() -> editor.requestFocus()); } }); addCommands(); editor.setOnKeyPressed(e -> { KeyCode code = e.getCode(); if (code == KeyCode.S && e.isControlDown()) { saveToFile(); e.consume(); } if (e.getCode() == KeyCode.P && e.isControlDown()) { showPreviewPopup(); e.consume(); } if (e.getCode() == KeyCode.F && e.isControlDown()) { showSearchField(); e.consume(); } }); searchField.setVisible(false); searchField.setOnKeyPressed(e -> { if (e.getCode() == KeyCode.ENTER) { searchForText(); e.consume(); } }); searchField.setOnKeyReleased(e -> { if (e.getCode() == KeyCode.ESCAPE) { if (searchField.textProperty().getValueSafe().trim().isEmpty()) { searchField.setVisible(false); editor.requestFocus(); } else { searchField.setText(""); } } }); }
From source file:com.panemu.tiwulfx.control.skin.LookupFieldSkin.java
private void createPopup() { popup = new PopupControl() { {// w ww . ja v a 2 s. c om setSkin(new Skin() { @Override public Skinnable getSkinnable() { return LookupFieldSkin.this.lookupField; } @Override public Node getNode() { return listView; } @Override public void dispose() { } }); } }; popup.setAutoHide(true); popup.setAutoFix(true); popup.setHideOnEscape(true); popup.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent t) { popup.hide(); } }); listView.setCellFactory(new Callback() { @Override public Object call(Object p) { return new PropertyListCell(lookupField.getPropertyName()); } }); /** * Taken from * {@link com.sun.javafx.scene.control.skin.ComboBoxListViewSkin} */ listView.addEventFilter(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent t) { // RT-18672: Without checking if the user is clicking in the // scrollbar area of the ListView, the comboBox will hide. Therefore, // we add the check below to prevent this from happening. EventTarget target = t.getTarget(); if (target instanceof Parent) { List<String> s = ((Parent) target).getStyleClass(); if (s.contains("thumb") || s.contains("track") || s.contains("decrement-arrow") || s.contains("increment-arrow")) { return; } } needValidation = false; lookupField.setValue(listView.getSelectionModel().getSelectedItem()); popup.hide(); } }); listView.setOnKeyPressed(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent t) { if (t.getCode() == KeyCode.ENTER) { needValidation = false; lookupField.setValue(listView.getSelectionModel().getSelectedItem()); popup.hide(); } else if (t.getCode() == KeyCode.ESCAPE) { popup.hide(); } } }); }
From source file:app.order.OrderController.java
@FXML void validateCash(KeyEvent event) { Order order = getSelectedObject();// w ww .j a v a 2s . c om if (event.getCode() == KeyCode.ENTER) { ((IOrderMetier) metier).validateCash(order); cash.setDisable(true); } }
From source file:com.panemu.tiwulfx.table.TableControl.java
public TableControl(Class<R> recordClass) { this.recordClass = recordClass; initControls();//from w ww . j a va 2 s. co m tblView.getSortOrder().addListener(new ListChangeListener<TableColumn<R, ?>>() { @Override public void onChanged(ListChangeListener.Change<? extends TableColumn<R, ?>> change) { reload(); } }); btnAdd.disableProperty().bind(mode.isEqualTo(Mode.EDIT)); btnEdit.disableProperty().bind(mode.isNotEqualTo(Mode.READ)); btnSave.disableProperty().bind(mode.isEqualTo(Mode.READ)); btnDelete.disableProperty().bind(new BooleanBinding() { { super.bind(mode, tblView.getSelectionModel().selectedItemProperty(), lstChangedRow); } @Override protected boolean computeValue() { if ((mode.get() == Mode.INSERT && lstChangedRow.size() < 2) || tblView.getSelectionModel().selectedItemProperty().get() == null || mode.get() == Mode.EDIT) { return true; } return false; } }); tblView.editableProperty().bind(mode.isNotEqualTo(Mode.READ)); tblView.getSelectionModel().cellSelectionEnabledProperty().bind(tblView.editableProperty()); mode.addListener(new ChangeListener<Mode>() { @Override public void changed(ObservableValue<? extends Mode> ov, Mode t, Mode t1) { if (t1 == Mode.READ) { directEdit = false; } } }); tblView.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) { lblRowIndex .setText(TiwulFXUtil.getLiteral("row.param", (page * maxResult.get() + t1.intValue() + 1))); } }); tblView.getFocusModel().focusedCellProperty().addListener(new ChangeListener<TablePosition>() { @Override public void changed(ObservableValue<? extends TablePosition> observable, TablePosition oldValue, TablePosition newValue) { if (tblView.isEditable() && directEdit && agileEditing.get()) { tblView.edit(newValue.getRow(), newValue.getTableColumn()); } } }); tblView.setOnKeyPressed(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent event) { if (event.getCode() == KeyCode.ESCAPE) { directEdit = false; } else if (event.getCode() == KeyCode.ENTER && mode.get() == Mode.READ) { getController().doubleClick(getSelectionModel().getSelectedItem()); } } }); /** * Define policy for TAB key press */ tblView.addEventFilter(KeyEvent.KEY_PRESSED, tableKeyListener); /** * In INSERT mode, only inserted row that is focusable */ tblView.getFocusModel().focusedCellProperty().addListener(tableFocusListener); tblView.setOnMouseReleased(tableRightClickListener); if (Platform.isFxApplicationThread()) { cm = new ContextMenu(); cm.setAutoHide(true); setToolTips(); /** * create custom row factory that can intercept double click on grid row */ tblView.setRowFactory(new Callback<TableView<R>, TableRow<R>>() { @Override public TableRow<R> call(TableView<R> param) { return new TableRowControl(TableControl.this); } }); } columns.addListener(new ListChangeListener<TableColumn<R, ?>>() { @Override public void onChanged(ListChangeListener.Change<? extends TableColumn<R, ?>> change) { while (change.next()) { if (change.wasAdded()) { for (TableColumn<R, ?> column : change.getAddedSubList()) { initColumn(column); } } lastColumnIndex = getLeafColumns().size() - 1; } } }); attachWindowVisibilityListener(); }