gpt4 book ai didi

javafx-2 - JavaFX TableView 可以部分编辑吗?

转载 作者:行者123 更新时间:2023-12-03 23:54:23 26 4
gpt4 key购买 nike

我有一个包含两列的 JavaFX TableView。此表使用 ObservableList gasRatioMeasures作为它的模型。

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

我想将其中一个设置为可编辑,另一个不可编辑。

首先我尝试了 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 列已经可以正常显示了(在我没有初始化measuresColumn的时候)。

PPS:我也试过代替 setOnEditCommit setOnEditStart . setOnEditCommit不是被调用,而是 setOnEditStart只能在可编辑列中调用。

最佳答案

您没有使用支持编辑的细胞工厂。你需要做:

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

关于javafx-2 - JavaFX TableView 可以部分编辑吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18721394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com