Pac*_*oid 15 events focus textfield javafx-2
我用JavaFX编写了一个应用程序,它只能用于键盘的箭头.所以我在Scene的舞台上阻止了MouseEvent,并且我"监听"了KeyEvents.我还关闭了所有节点的可聚焦性:
for(Node n : children) {
n.setFocusTraversable(false);
Run Code Online (Sandbox Code Playgroud)
现在我有一些文本字段,复选框和按钮.我想以编程方式更改输入控件(textfield,checkbox,..)的状态:例如,我想进入文本字段以编程方式编辑内容.所以我的问题是:如何进入非焦点可遍历的文本字段?因为textfield.requestFocus(); 因为我将false设置为textfield的focustraversable属性,所以不再起作用了.
谢谢
Ulu*_*Biy 48
通过
n.setFocusTraversable(false);
Run Code Online (Sandbox Code Playgroud)
节点不可聚焦,而不是不可聚焦.它仍然可以通过鼠标或编程方式集中.由于您阻止了鼠标事件,因此这里有另一个选项:
Platform.runLater(new Runnable() {
@Override
public void run() {
textfield.requestFocus();
}
});
Scene scene = new Scene(root);
Run Code Online (Sandbox Code Playgroud)
编辑:根据评论,国家
的javadoc requestFocus:
...为了有资格获得焦点,节点必须是场景的一部分,它和它的所有祖先必须是可见的,并且不能禁用它....
所以这个方法应该在构建场景图后调用如下:
Scene scene = new Scene(root);
textfield.requestFocus();
Run Code Online (Sandbox Code Playgroud)
但是,上面的Platform.runLater将在main方法之后运行start(),这确保了requestFocus的调用将在场景图形结构之后.
取决于requestFocus实现代码,可能还有其他原因.