3

チェックボックスの列を中央に配置する必要があるテーブルビューを処理するときに問題が見つかりました。チェックボックス付きの列を作成できます。また、そのチェックボックスの値に従ってモデルにプロパティを設定したいと思います。私は次のコードでそれを行いました:

isCanceledCol.setCellValueFactory(new Callback<CellDataFeatures<TransactionModel,CheckBox>,ObservableValue<CheckBox>>() {

            @Override
            public ObservableValue<CheckBox> call(final CellDataFeatures<TransactionModel, CheckBox> p) {
                CheckBox cb = new CheckBox();
                cb.selectedProperty().addListener(new ChangeListener<Boolean>() {

                    @Override
                    public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
                        p.getValue().setIsCanceled(t1.booleanValue());
                    }
                }
                        );
                canceledCB.add(cb);
                return new SimpleObjectProperty(cb);
            }

上記のコードの問題は、チェックボックスが左揃えで表示されることです。中央に配置したいのですが、チェックボックスのchangedイベントを保持して、モデルプロパティを変更したいと思います(p.getValue()。setIsCanceled(t1.booleanValue());)。

皆さんの助けに本当に感謝しています。

よろしく、クリスマアンディカ

4

1 に答える 1

3

JavaFX Ensemble(javafxサンプル)には、使用しようとしている完璧なコードが含まれています。加えて、彼らはでを使用するより良い方法を与えCheckBoxましたTableView

ポイントは、コントロールTableCellによって使用される範囲です。列TableViewを作成するには、以下を作成して使用する必要があります。CheckBox

//CheckBoxTableCell for creating a CheckBox in a table cell
public static class CheckBoxTableCell<S, T> extends TableCell<S, T> {
    private final CheckBox checkBox;
    private ObservableValue<T> ov;

    public CheckBoxTableCell() {
        this.checkBox = new CheckBox();
        this.checkBox.setAlignment(Pos.CENTER);

        setAlignment(Pos.CENTER);
        setGraphic(checkBox);
    } 

    @Override public void updateItem(T item, boolean empty) {
        super.updateItem(item, empty);
        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            setGraphic(checkBox);
            if (ov instanceof BooleanProperty) {
                checkBox.selectedProperty().unbindBidirectional((BooleanProperty) ov);
            }
            ov = getTableColumn().getCellObservableValue(getIndex());
            if (ov instanceof BooleanProperty) {
                checkBox.selectedProperty().bindBidirectional((BooleanProperty) ov);
            }
        }
    }
}

setAlignment(Pos.CENTER)、セルの中央にコントロールを設定します。

于 2012-11-12T17:42:23.130 に答える