我已经在JavaFX TableView教程中实现了类似于Example 12-11 Alternative Solution Of Cell Editing的单元编辑器Example 12-11 Alternative Solution Of Cell Editing(我正在描述的问题可以复制,使用该示例作为SSCCE) .
然而,它伴随着一个非常烦人的错误,那就是用作编辑器的 TextEdit
控件内的每次鼠标点击(用于移动插入符号或选择文本)都会导致焦点更改,从而提交并结束编辑 .
负责提交的代码:
textField.focusedProperty().addListener(new ChangeListener<Boolean>(){
@Override
public void changed(ObservableValue<? extends Boolean> arg0,
Boolean arg1, Boolean arg2) {
if (!arg2) {
commitEdit(textField.getText());
}
}
});
我发现焦点是暂时给予 TableView
的 VirtualFlow
然后又快速回到 TextEdit
(不知道为什么会发生这种焦点变化,也可以自由地说明这一点) . 这比UI更新发生得更快,因此用户将无法体验这种快速焦点更改 . 不幸的是,变革听众会......
How can I create a cell editor that does not have this issue?
要求:
-
我需要让编辑器在"real"焦点更改时提交值(即在编辑器外单击)
-
编辑器内的点击必须传播到
TextEdit
以允许文本选择,移动插入符号等 . -
它应该适用于Java 7和JavaFX 2.2
PS:this blog post(及其update)中提到的解决方案显示了完全相同的问题 .
1 回答
此问题在1.8b123中显示为已修复 .
如果你需要它在FX 2.2中工作,试试这个超级丑陋的黑客: