List of usage examples for javafx.scene.control.cell CheckBoxTableCell CheckBoxTableCell
public CheckBoxTableCell()
From source file:com.rvantwisk.cnctools.controllers.CNCToolsController.java
@FXML // This method is called by the FXMLLoader when initialization is complete void initialize() { assert addMillTask != null : "fx:id=\"addMillTask\" was not injected: check your FXML file 'CNCTools.fxml'."; assert btnMoveTaskDown != null : "fx:id=\"btnMoveTaskDown\" was not injected: check your FXML file 'CNCTools.fxml'."; assert btnMoveTaskUp != null : "fx:id=\"btnMoveTaskUp\" was not injected: check your FXML file 'CNCTools.fxml'."; assert btnPostProcessor != null : "fx:id=\"btnPostProcessor\" was not injected: check your FXML file 'CNCTools.fxml'."; assert btnView != null : "fx:id=\"btnView\" was not injected: check your FXML file 'CNCTools.fxml'."; assert deleteProject != null : "fx:id=\"deleteProject\" was not injected: check your FXML file 'CNCTools.fxml'."; assert descriptionValue != null : "fx:id=\"descriptionValue\" was not injected: check your FXML file 'CNCTools.fxml'."; assert details != null : "fx:id=\"details\" was not injected: check your FXML file 'CNCTools.fxml'."; assert displayedIssueLabel != null : "fx:id=\"displayedIssueLabel\" was not injected: check your FXML file 'CNCTools.fxml'."; assert editMilltask != null : "fx:id=\"editMilltask\" was not injected: check your FXML file 'CNCTools.fxml'."; assert generateGCode != null : "fx:id=\"generateGCode\" was not injected: check your FXML file 'CNCTools.fxml'."; //assert millTaskDescription != null : "fx:id=\"millTaskDescription\" was not injected: check your FXML file 'CNCTools.fxml'."; //assert millTaskName != null : "fx:id=\"millTaskName\" was not injected: check your FXML file 'CNCTools.fxml'."; //assert millTaskOperation != null : "fx:id=\"millTaskOperation\" was not injected: check your FXML file 'CNCTools.fxml'."; assert milltaskEnabled != null : "fx:id=\"milltaskEnabled\" was not injected: check your FXML file 'CNCTools.fxml'."; assert removeMilltask != null : "fx:id=\"removeMilltask\" was not injected: check your FXML file 'CNCTools.fxml'."; assert tbl_millTasks != null : "fx:id=\"tbl_millTasks\" was not injected: check your FXML file 'CNCTools.fxml'."; assert v_projectList != null : "fx:id=\"v_projectList\" was not injected: check your FXML file 'CNCTools.fxml'."; v_projectList.setItems(projectModel.projectsProperty()); projectModel.loadPostProcessors();//ww w .ja v a 2 s . c om if (projectModel.postProcessorsProperty().size() == 0) { addDefaultPostprocessorSet(); projectModel.savePostProcessors(); MonologFX dialog = new MonologFX(MonologFX.Type.INFO); dialog.setTitleText("Postprocessor defaults loaded"); dialog.setMessage("No Post Processors where found, a new a new post processor set has been created."); dialog.show(); } projectModel.loadToolsFromDB(); if (projectModel.toolDBProperty().size() == 0) { addDefaultToolSet(); projectModel.saveToolDB(); MonologFX dialog = new MonologFX(MonologFX.Type.INFO); dialog.setTitleText("Tools defaults loaded"); dialog.setMessage("No tools where found, a new a new toolset has been created."); dialog.show(); } projectModel.loadProjectsFromDB(); if (projectModel.projectsProperty().size() == 0) { addProjectDefaults(); projectModel.saveProjects(); MonologFX dialog = new MonologFX(MonologFX.Type.INFO); dialog.setTitleText("Project defaults loaded"); dialog.setMessage( "No project was found, a new template project was created. Feel free to delete or modify"); dialog.show(); } deleteProject.disableProperty().bind(v_projectList.getSelectionModel().selectedItemProperty().isNull()); btnPostProcessor.disableProperty().bind(v_projectList.getSelectionModel().selectedItemProperty().isNull()); btnView.disableProperty().bind(v_projectList.getSelectionModel().selectedItemProperty().isNull()); removeMilltask.disableProperty().bind(tbl_millTasks.getSelectionModel().selectedItemProperty().isNull()); addMillTask.disableProperty().bind(v_projectList.getSelectionModel().selectedItemProperty().isNull()); editMilltask.disableProperty().bind(tbl_millTasks.getSelectionModel().selectedItemProperty().isNull()); generateGCode.disableProperty().bind(v_projectList.getSelectionModel().selectedItemProperty().isNull()); // Update description when project changes by means of databinding v_projectList.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Project>() { @Override public void changed(ObservableValue<? extends Project> observable, Project oldValue, Project newValue) { if (oldValue != null) { descriptionValue.textProperty().unbindBidirectional(oldValue.descriptionProperty()); } if (projectModel.projectsProperty().size() == 0) { tbl_millTasks.getItems().clear(); } else { tbl_millTasks.setItems(newValue.millTasksProperty()); descriptionValue.textProperty().bindBidirectional(newValue.descriptionProperty()); } } }); // Enable/Disable up/Down arrows tbl_millTasks.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TaskRunnable>() { @Override public void changed(ObservableValue<? extends TaskRunnable> observable, TaskRunnable o, TaskRunnable o2) { if (o2 != null) { final int index = tbl_millTasks.getSelectionModel().getSelectedIndex(); btnMoveTaskUp.setDisable(index == 0 ? true : false); btnMoveTaskDown.setDisable((index + 1) == tbl_millTasks.getItems().size() ? true : false); } else { btnMoveTaskUp.setDisable(true); btnMoveTaskDown.setDisable(true); } } }); btnMoveTaskUp.setDisable(true); btnMoveTaskDown.setDisable(true); // Set text in ListView v_projectList.setCellFactory(new Callback<ListView<Project>, ListCell<Project>>() { @Override public ListCell<Project> call(ListView<Project> p) { ListCell<Project> cell = new ListCell<Project>() { @Override protected void updateItem(Project t, boolean bln) { super.updateItem(t, bln); if (t != null) { setText(t.nameProperty().getValue()); } else { setText(null); } } }; return cell; } }); // checkbox renderer for milltasks milltaskEnabled.setCellFactory( new Callback<TableColumn<TaskRunnable, Boolean>, TableCell<TaskRunnable, Boolean>>() { @Override public TableCell<TaskRunnable, Boolean> call(TableColumn<TaskRunnable, Boolean> p) { CheckBoxTableCell<TaskRunnable, Boolean> cell = new CheckBoxTableCell<>(); cell.setEditable(true); cell.setAlignment(Pos.CENTER); return cell; } }); tbl_millTasks.setEditable(true); // Save DB on exit getDialog().setOnHidden(new EventHandler<WindowEvent>() { public void handle(WindowEvent we) { save(null); } }); }
From source file:qupath.lib.gui.tma.TMASummaryViewer.java
private Pane getCustomizeTablePane() { TableView<TreeTableColumn<TMAEntry, ?>> tableColumns = new TableView<>(); tableColumns.setPlaceholder(new Text("No columns available")); tableColumns.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); tableColumns.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); SortedList<TreeTableColumn<TMAEntry, ?>> sortedColumns = new SortedList<>( table.getColumns().filtered(p -> !p.getText().trim().isEmpty())); sortedColumns.setComparator((c1, c2) -> c1.getText().compareTo(c2.getText())); tableColumns.setItems(sortedColumns); sortedColumns.comparatorProperty().bind(tableColumns.comparatorProperty()); // sortedColumns.comparatorProperty().bind(tableColumns.comparatorProperty()); TableColumn<TreeTableColumn<TMAEntry, ?>, String> columnName = new TableColumn<>("Column"); columnName.setCellValueFactory(v -> v.getValue().textProperty()); TableColumn<TreeTableColumn<TMAEntry, ?>, Boolean> columnVisible = new TableColumn<>("Visible"); columnVisible.setCellValueFactory(v -> v.getValue().visibleProperty()); // columnVisible.setCellValueFactory(col -> { // SimpleBooleanProperty prop = new SimpleBooleanProperty(col.getValue().isVisible()); // prop.addListener((v, o, n) -> col.getValue().setVisible(n)); // return prop; // });//from www . j av a2 s . com tableColumns.setEditable(true); columnVisible.setCellFactory(v -> new CheckBoxTableCell<>()); tableColumns.getColumns().add(columnName); tableColumns.getColumns().add(columnVisible); ContextMenu contextMenu = new ContextMenu(); Action actionShowSelected = new Action("Show selected", e -> { for (TreeTableColumn<?, ?> col : tableColumns.getSelectionModel().getSelectedItems()) { if (col != null) col.setVisible(true); else { // Not sure why this happens...? logger.trace("Selected column is null!"); } } }); Action actionHideSelected = new Action("Hide selected", e -> { for (TreeTableColumn<?, ?> col : tableColumns.getSelectionModel().getSelectedItems()) { if (col != null) col.setVisible(false); else { // Not sure why this happens...? logger.trace("Selected column is null!"); } } }); contextMenu.getItems().addAll(ActionUtils.createMenuItem(actionShowSelected), ActionUtils.createMenuItem(actionHideSelected)); tableColumns.setContextMenu(contextMenu); tableColumns.setTooltip( new Tooltip("Show or hide table columns - right-click to change multiple columns at once")); BorderPane paneColumns = new BorderPane(tableColumns); paneColumns.setBottom(PanelToolsFX.createColumnGridControls(ActionUtils.createButton(actionShowSelected), ActionUtils.createButton(actionHideSelected))); VBox paneRows = new VBox(); // Create a box to filter on some metadata text ComboBox<String> comboMetadata = new ComboBox<>(); comboMetadata.setItems(metadataNames); comboMetadata.getSelectionModel().getSelectedItem(); comboMetadata.setPromptText("Select column"); TextField tfFilter = new TextField(); CheckBox cbExact = new CheckBox("Exact"); // Set listeners cbExact.selectedProperty().addListener( (v, o, n) -> setMetadataTextPredicate(comboMetadata.getSelectionModel().getSelectedItem(), tfFilter.getText(), cbExact.isSelected(), !cbExact.isSelected())); tfFilter.textProperty().addListener( (v, o, n) -> setMetadataTextPredicate(comboMetadata.getSelectionModel().getSelectedItem(), tfFilter.getText(), cbExact.isSelected(), !cbExact.isSelected())); comboMetadata.getSelectionModel().selectedItemProperty().addListener( (v, o, n) -> setMetadataTextPredicate(comboMetadata.getSelectionModel().getSelectedItem(), tfFilter.getText(), cbExact.isSelected(), !cbExact.isSelected())); GridPane paneMetadata = new GridPane(); paneMetadata.add(comboMetadata, 0, 0); paneMetadata.add(tfFilter, 1, 0); paneMetadata.add(cbExact, 2, 0); paneMetadata.setPadding(new Insets(10, 10, 10, 10)); paneMetadata.setVgap(2); paneMetadata.setHgap(5); comboMetadata.setMaxWidth(Double.MAX_VALUE); GridPane.setHgrow(tfFilter, Priority.ALWAYS); GridPane.setFillWidth(comboMetadata, Boolean.TRUE); GridPane.setFillWidth(tfFilter, Boolean.TRUE); TitledPane tpMetadata = new TitledPane("Metadata filter", paneMetadata); tpMetadata.setExpanded(false); // tpMetadata.setCollapsible(false); Tooltip tooltipMetadata = new Tooltip( "Enter text to filter entries according to a selected metadata column"); Tooltip.install(paneMetadata, tooltipMetadata); tpMetadata.setTooltip(tooltipMetadata); paneRows.getChildren().add(tpMetadata); // Add measurement predicate TextField tfCommand = new TextField(); tfCommand.setTooltip(new Tooltip("Predicate used to filter entries for inclusion")); TextFields.bindAutoCompletion(tfCommand, e -> { int ind = tfCommand.getText().lastIndexOf("\""); if (ind < 0) return Collections.emptyList(); String part = tfCommand.getText().substring(ind + 1); return measurementNames.stream().filter(n -> n.startsWith(part)).map(n -> "\"" + n + "\" ") .collect(Collectors.toList()); }); String instructions = "Enter a predicate to filter entries.\n" + "Only entries passing the test will be included in any results.\n" + "Examples of predicates include:\n" + " \"Num Tumor\" > 200\n" + " \"Num Tumor\" > 100 && \"Num Stroma\" < 1000"; // labelInstructions.setTooltip(new Tooltip("Note: measurement names must be in \"inverted commands\" and\n" + // "&& indicates 'and', while || indicates 'or'.")); BorderPane paneMeasurementFilter = new BorderPane(tfCommand); Label label = new Label("Predicate: "); label.setAlignment(Pos.CENTER); label.setMaxHeight(Double.MAX_VALUE); paneMeasurementFilter.setLeft(label); Button btnApply = new Button("Apply"); btnApply.setOnAction(e -> { TablePredicate predicateNew = new TablePredicate(tfCommand.getText()); if (predicateNew.isValid()) { predicateMeasurements.set(predicateNew); } else { DisplayHelpers.showErrorMessage("Invalid predicate", "Current predicate '" + tfCommand.getText() + "' is invalid!"); } e.consume(); }); TitledPane tpMeasurementFilter = new TitledPane("Measurement filter", paneMeasurementFilter); tpMeasurementFilter.setExpanded(false); Tooltip tooltipInstructions = new Tooltip(instructions); tpMeasurementFilter.setTooltip(tooltipInstructions); Tooltip.install(paneMeasurementFilter, tooltipInstructions); paneMeasurementFilter.setRight(btnApply); paneRows.getChildren().add(tpMeasurementFilter); logger.info("Predicate set to: {}", predicateMeasurements.get()); VBox pane = new VBox(); // TitledPane tpColumns = new TitledPane("Select column", paneColumns); // tpColumns.setMaxHeight(Double.MAX_VALUE); // tpColumns.setCollapsible(false); pane.getChildren().addAll(paneColumns, new Separator(), paneRows); VBox.setVgrow(paneColumns, Priority.ALWAYS); return pane; }