【问题标题】:Javafx: updating cell using choicebox in the GUI doesn't workJavafx:在 GUI 中使用选择框更新单元格不起作用
【发布时间】:2015-08-13 15:34:08
【问题描述】:

我在使用 javafx 创建的 Tableview 中遇到问题。我已经在表格的 fxml 文件上设置了 edititable="true",然后在我执行的控制器中

@FXML
private TableColumn<ARule,Object> rankCol;

rankCol.setCellValueFactory(new PropertyValueFactory<ARule, Object>("label")); rankCol.setCellFactory(ChoiceBoxTableCell.forTableColumn(Main.getlabelSample())); rankCol.setOnEditCommit(e -> {System.out.println("something happens!");});

要在列中创建一个用于更改属性值的选择框。 ARu​​le 有一个属性字段以及 getter 和 setter:

private SimpleObjectProperty label;
public SimpleObjectProperty labelProperty() {
    return label;
}
public void setLabel(Object label) {
    this.label.set(label);
}
public Object getLabel(){
    return this.label.getValue();
}

函数 Main.getlabelSample() 重新运行这个用字符串或整数填充的对象

private static final ObservableList<Object> labelSample = FXCollections.observableArrayList();

问题是在界面中我可以编辑列并且它在 labelSample 列表中显示正确的值,问题是它不会更改 ARule 对象的值,这由缺少的调用突出显示setOnEditCommit 处理程序。 GUI 上的值是新选择的值,但保存在表中项目上的值是旧值。

我还有一个单独的按钮来更改所选行上该列的值,如果我触发该按钮,“真实”的值会更改(在 GUI 和模型上)。

代码中的错误可能是什么?

【问题讨论】:

    标签: properties javafx tableview


    【解决方案1】:

    该列的默认编辑提交行为设置为onEditCommit 属性。如果你打电话给

    rankCol.setOnEditCommit(...);
    

    然后将此属性设置为其他值,即删除默认行为。

    如果您想为默认添加额外的行为,请使用addEventHandler(...) 而不是setOnEditCommit(...)

    rankCol.addEventHandler(TableColumn.editCommitEvent(), e -> {
        System.out.println("Something happens");
    });
    

    【讨论】:

      【解决方案2】:

      在代码行中找到答案:

      rankCol.setOnEditCommit(e -> {System.out.println("something happens!");});
      

      由于某种原因覆盖了更新单元格的默认行为,将代码更改为

      rankCol.setOnEditCommit(e -> {
              e.getTableView().getItems().get(e.getTablePosition().getRow()).setLabel(e.getNewValue());
              System.out.println("Something happens!");});
      

      解决了问题。目前我不知道为什么会这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-18
        • 2015-03-27
        • 2012-03-12
        • 1970-01-01
        • 2015-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多