4

2 つの列を持つ JavaFX TableView があります。このテーブルは ObservableListgasRatioMeasuresをモデルとして使用します。

public class GasRatioMeasureBean {
    private String number;
    private String measure;
    public String getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = "Measure" + (number + 1) + "(%)";
    }
    public String getMeasure() {
        return measure;
    }
    public void setMeasure(String measure) {
        this.measure = measure;
    }
}

そのうちの 1 つを編集可能に、もう 1 つを編集不可に設定したいと思います。

まず、FXML の方法を試しました。

<TableView layoutX="24.0" layoutY="122.0" prefHeight="200.0" prefWidth="215.0" fx:id="measureTableView">
    <columns>
         <TableColumn editable="false" prefWidth="100.0" sortable="false" text="No" fx:id="measureNumbersColumn" />
         <TableColumn editable="true" prefWidth="110.0" sortable="false" text="Measures" fx:id="measuresColumn" />
    </columns>
</TableView>

しかし、これはうまくいきませんでした。テーブルは常に編集できません。

私もJavaの方法を試しました:

private void initMeasuresTableView() {
    measureNumbersColumn.setCellValueFactory(new PropertyValueFactory<GasRatioMeasureBean, String>("number"));
    measureNumbersColumn.setEditable(false);
    measuresColumn.setCellValueFactory(new PropertyValueFactory<GasRatioMeasureBean, String>("measure"));
    measuresColumn.setOnEditCommit(
        new EventHandler<CellEditEvent<GasRatioMeasureBean, String>>() {
            public void handle(CellEditEvent<GasRatioMeasureBean, String> measure) {
                ((GasRatioMeasureBean) measure.getTableView().getItems().get(
                measure.getTablePosition().getRow())
                ).setMeasure(measure.getNewValue());
            }
        }
    );

    measureTableView.setItems(gasRatioMeasures);
    measureTableView.setEditable(true);
}

しかし、これもうまくいきませんでした。すべてのテーブルは編集できませんでした。

TableColumn にeditableプロパティがある場合は、個別に設定できる必要があります。

私がどこで間違っているか知っているなら、私を助けてください。ありがとう!

PS: 列 measureNumbersColumn は既に正常に表示されています (measureColumn を初期化していない場合)。

PPS: の代わりに私も試しましたsetOnEditCommit setOnEditStartsetOnEditCommitは呼び出されませんがsetOnEditStart、編集可能な列で呼び出すことができます。

4

2 に答える 2

7

編集をサポートするセル ファクトリを使用していません。あなたがする必要があります:

measureNumbersColumn.setCellFactory(TextFieldTableCell.forTableColumn()) 

これにより、列TextFieldTableCellがデフォルトの代わりに を使用するようになりますTableCell。TextFieldTableCell は編集をサポートしています (ソース コードを見て、startEditメソッドを探します)。

あるいは、TextFieldTableCell の動作に満足できない場合は、TableCell の独自の実装を記述して、startEdit、cancelEdit、および updateItem メソッドをオーバーライドできます。

measureNumbersColumn.setCellFactory(new Callback<TableColumn<GasRatioMeasureBean,String>, TableCell<GasRatioMeasureBean,String>>() {

    @Override
    public TableCell<GasRatioMeasureBean, String> call(
            TableColumn<GasRatioMeasureBean, String> arg0) {
        return MyOwnTableCell(); 
    }
});
于 2013-09-11T07:36:31.520 に答える
4

これは、TableView で編集可能な列を作成する方法です。

tblViewPerson.setEditable(真);

        // Making editable columns 
        // For ID

        tblColID.setCellFactory(TextFieldTableCell.forTableColumn());

        tblColID.setOnEditCommit(
            new EventHandler<CellEditEvent<Person, String>>() {
                public void handle(CellEditEvent<Person, String> t) {
                    ((Person) t.getTableView().getItems().get(
                        t.getTablePosition().getRow())
                        ).setId(t.getNewValue());
                }
            }
        );
于 2015-05-01T07:37:43.293 に答える