Example usage for javafx.scene.control.cell CheckBoxTableCell CheckBoxTableCell

List of usage examples for javafx.scene.control.cell CheckBoxTableCell CheckBoxTableCell

Introduction

In this page you can find the example usage for javafx.scene.control.cell CheckBoxTableCell CheckBoxTableCell.

Prototype

public CheckBoxTableCell() 

Source Link

Document

Creates a default CheckBoxTableCell.

Usage

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;
}