从tableview中选择复选框

时间:2016-03-14 02:35:31

标签: intellij-idea javafx javafx-2 javafx-8

我的每个行都有tableview with checkbox,我有一个动作按钮。我的问题是,如何从tableview中选中复选框以在按下按钮时应用操作?

这就是我将复选框添加到tableview

的方法
    public void addCeckBoxToTableView() {
    /** define a simple boolean cell value for the action column so that the column will only be shown for non-empty rows. */
    tcCb.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Object, Boolean>,
            ObservableValue<Boolean>>() {
        @Override
        public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<Object, Boolean> p) {
            return new SimpleBooleanProperty(p.getValue() != null);
        }
    });
    /** create a cell value factory with an add button for each row in the table. */
    tcCb.setCellFactory(new Callback<TableColumn<Object, Boolean>, TableCell<Object, Boolean>>() {
        @Override
        public TableCell<Object, Boolean> call(TableColumn<Object, Boolean> p) {
            return new CheckBoxCell();
        }
    });
}

    private class CheckBoxCell extends TableCell<Object, Boolean> {
    CheckBox checkBox = new CheckBox();
    HBox hb = new HBox(checkBox);
    /**
     * places button in the row only if the row is not empty.
     */
    @Override
    protected void updateItem(Boolean item, boolean empty) {
        super.updateItem(item, empty);
        if (!empty) {
            setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
            setGraphic(hb);
        } else {
            setGraphic(null);
        }
    }
}

亲切。

2 个答案:

答案 0 :(得分:0)

我和詹姆斯有同样的看法:&#34;通过这种设置,你可以&#34;

但你可以这样做

private TableView<Record> table;
private TableColumn<Record, Boolean> tcCb;
private Button actionButton;

public class Record {
    private SimpleBooleanProperty selected = new SimpleBooleanProperty();

    public SimpleBooleanProperty selectedProperty() {
        return selected;
    }
}

@Override
public void start(Stage primaryStage) throws Exception {
    table = new TableView<Record>(FXCollections.observableArrayList(new Record(), new Record(), new Record()));
    table.setEditable(true);
    // Create "CheckBox" - Column
    tcCb = new TableColumn<Record, Boolean>("Boolean-Column");
    tcCb.setCellValueFactory(new PropertyValueFactory<Record, Boolean>("selected"));
    tcCb.setCellFactory(CheckBoxTableCell.forTableColumn(tcCb));
    tcCb.setEditable(true);
    table.getColumns().add(tcCb);
    // Create actionButton for retrieving cellData
    actionButton = new Button("action");
    actionButton.setOnAction(actionEvent -> {
        for (int row = 0; row < table.getItems().size(); row++) {
            System.out.println(tcCb.getCellData(row));
        }
    });
    // The uninteresting stuff...
    primaryStage.setScene(new Scene(new VBox(table, actionButton)));
    primaryStage.show();
}

答案 1 :(得分:0)

UI元素应将它们与对象相关联。在您的示例中,您希望对所选项目(Selected CheckBox)应用操作。

与表关联的对象可以是这样的

public class TableData{
private Boolean selected=Boolean.False;
public void setSelected(Boolean isSelected){
this.isSelected = isSelected;
}

public boolean isSelected(){
return this.selected;
}
}

所以在TableCell中, 选中复选框后,更新“已选中”。 TableData的布尔值,通过向CheckBox添加选择动作侦听器。

然后你可以遍历TableData,你可以从TableView中获取它,以便在Button选择时应用这些动作。