【问题标题】:commitEdit on TableCell focus change在 TableCell 焦点更改上的 commitEdit
【发布时间】:2014-05-28 01:18:27
【问题描述】:

我打算在单击 TableView 上的其他位置时提交对 TableCell 的更改。这是我在 Oracle 教程中实现的 createTextField 方法。

private void createTextField() {
    textField.setText(getString());
    textField.setMinWidth(this.getWidth() - this.getGraphicTextGap() * 2);
    textField.addEventFilter(KeyEvent.KEY_PRESSED, (KeyEvent t) -> {
        if (t.getCode() == KeyCode.ENTER || t.getCode() == KeyCode.TAB) {
            commitEdit(textField.getText());
        } else if (t.getCode() == KeyCode.ESCAPE) {
            cancelEdit();
        }
    });

    textField.focusedProperty().addListener((ObservableValue<? extends Boolean> ov, Boolean t0, Boolean t1) -> {
        if(!t1) 
             commitEdit(textField.getText());
    });
}

当我单击其他表格单元格时,更新的字符串不会反映。我正在使用 Java 8b123。

【问题讨论】:

  • 通过单击任何其他 TabeCell,编辑将被丢弃。知道为什么会这样吗?
  • 默认行为是在焦点更改时调用 cancelEdit()。详细说明见stackoverflow.com/a/25291137/132374

标签: javafx-8 tablecell


【解决方案1】:

代替:

textField.focusedProperty().addListener((ObservableValue<? extends Boolean> ov, Boolean t0, Boolean t1) -> {
    if(!t1) 
         commitEdit(textField.getText());
});

放:

getTableRow().focusedProperty().addListener((ObservableValue<? extends Boolean> ov, Boolean t0, Boolean t1) -> {
    if(!t1) 
         commitEdit(textField.getText());
});

【讨论】:

  • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
  • 通过代码,我们只是在行的焦点属性上添加了一个监听器。这意味着如果这个属性发生变化(在我们的例子中,如果我们通过单击其他地方来失去对行的关注),我们将使用 textarea 值 (getText()) 调用方法“commitEdit”
猜你喜欢
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 2011-01-07
相关资源
最近更新 更多