Java FX 2表格单元格编辑和聚焦
问题描述:
我一直在学习JavaFX 2的一些内容,但是我遇到了可编辑表格单元的问题,我找不到解决方案。为了节省粘贴了大量的代码,我已经创建了一个包含JavaFX的文档只有TableView中示例项目:http://docs.oracle.com/javafx/2/ui_controls/table-view.htmJava FX 2表格单元格编辑和聚焦
如果你运行了这个代码,您看到此行为:
- 点击一行选择该行。
- 单击所选行中的单元格将单元格转换为文本字段,以便可以编辑该单元格。
- 单击文本字段可以对内容进行编辑。
问题是,这是三次点击,以达到单元格可以编辑的点。我想实现的是当创建(例如第2步)焦点中的文本字段直接切换到文本字段。
我最好的猜测就如何实现这一目标是增加textField.requestFocus()
到的startEditing()
方法的末尾:
@Override
public void startEdit() {
super.startEdit();
if (textField == null) {
createTextField();
}
setGraphic(textField);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
textField.selectAll();
textField.requestFocus();
}
但这不起作用。如果我将焦点侦听器添加到文本字段中,我发现它会获得焦点,但会再次失去焦点。在侦听器中插入一个中断点似乎表明TableView在显示文本字段之前重新获得焦点。
因此,问题是如何在编辑开始时将注意力集中到文本字段?
答
能否请您与更换线textField.requestFocus();
:
Platform.runLater(new Runnable() {
@Override
public void run() {
textField.requestFocus();
}
});
,然后再试一次。
谢谢乌鲁克,这是固定的。看看runLater的文档,虽然我猜测这可能会失败,因为它不能保证它的运行时间 - 大概它可以在表格抓取之前运行。 – wobblycogs 2012-04-26 11:02:15
我同意wobblycogs,我已经使用runlater技巧在过去几次要求重点,它一直为我工作,但缺乏确定性,它会继续工作并不会给我一个温暖,模糊感觉它。 (另一种方法是使用时间轴将焦点请求推回到后面 - 但这种方法有它自己的问题)。 – jewelsea 2012-04-26 18:10:21