当前位置: 首页 > 知识库问答 >
问题:

JavaFX:以编程方式聚焦文本字段

乜昆
2023-03-14

我用JavaFX编写了一个应用程序,它只能用于键盘的箭头。所以我在现场的舞台上阻止了MouseeEvent,我“倾听”关键事件。我还关闭了所有节点的聚焦:

for(Node n : children) {
     n.setFocusTraversable(false);

现在我有了一些文本字段、复选框和按钮。我想更改输入控件的状态(文本字段,复选框,…)编程:例如,我想输入文本字段以编程方式编辑内容。所以我的问题是:如何输入非焦点可遍历的文本字段?因为textfield。requestFocus();自从我将false设置为textfield的focustraversable属性后,就不再工作了。

谢谢

共有2个答案

任繁
2023-03-14

设置。requestFocus();在初始化方法时启用。fxml文件加载控制

@Override
public void initialize(URL url, ResourceBundle rb) {
/* the field defined on .fxml document  
@FXML
private TextField txtYear;
*/
txtYear.requestFocus();
}
戈建白
2023-03-14

通过

n.setFocusTraversable(false);

节点被设置为非焦点可遍历,而不是非焦点可遍历。它仍然可以通过鼠标或编程等方式进行聚焦。由于您阻止了鼠标事件,下面是另一个选项:

Platform.runLater(new Runnable() {
    @Override
    public void run() {
        textfield.requestFocus();
    }
});

Scene scene = new Scene(root);

编辑:根据注释,requestFocus的javadoc声明:

...要有资格接收焦点,节点必须是场景的一部分,它及其所有祖先必须可见,并且不得禁用。...

因此,该方法应在构建场景图后调用,如下所示:

Scene scene = new Scene(root);
textfield.requestFocus();

然而,平台。上面的runLater将在main方法start()之后运行,这确保了requestFocus的调用将在场景图协同构建之后进行。

根据requestFocus实现代码,可能还有其他原因。

 类似资料:
  • 问题内容: 我正在尝试以编程方式选择/聚焦一行。 我可以选择一行,但它不会呈现为 焦点 (未突出显示)。我已经尝试了以下代码的许多组合,但似乎没有任何效果。 是否可以通过编程突出显示行? 我正在使用JavaFX 2.2.21 问题答案: 尝试首先将请求放在表焦点上,然后将整个内容包装在一个文件中。

  • 我试图实现一个非常简单的用例,一个UI特性,其中: null 这些建议和类似的建议都不起作用。我也试着愚弄一下反应,看看我能不能做点什么!我使用了真实的DOM: 而且也没用。我甚至无法理解的一件事是这样的建议:将ref作为一个方法(我“猜测”),我甚至没有尝试它,因为我有很多这样的组件,我需要ref来进一步获得每个组件的值,我无法想象如果我的ref没有命名,我如何获得的值! 所以你能给出一个想法,

  • 我在寻找一种方法来放弃我的程序中的一个getter。我有一堆动态创建的文本字段: 下面是getter,我想在这里返回聚焦的TextField 处理程序将接收聚焦字段并调用我的“model”-class中的checkInput()方法。 此刻,它接收到一个由我自己设置的预定义字段。检查答案的代码有效。感谢任何帮助我的人,如果我自己找到了一个方法,我一定会把它贴在这里。

  • 问题内容: 我有一个多层PSD,其中一个特定的层是非光栅化文本。我试图从bash / perl / python / whatever- else程序中找出一种可行的方法: 加载PSD 编辑所述图层中的文本 展平图像中的所有图层 另存为Web友好格式,如PNG或JPG 我立刻想到了ImageMagick,但是我认为我无法通过IM编辑文本层。如果我可以通过其他编程方式完成前两个步骤,则可以始终使用I

  • 这里有个简单的问题。我有一个UIButton,currencySelector,我想通过编程更改文本。以下是我所拥有的: Xcode给了我一个错误“预期声明”。我做错了什么?我该如何更改按钮的文本?

  • 问题内容: 我正在尝试实现一个非常简单的用例,UI功能,其中: 有一个带有一些内容的标签 如果单击,则将文本输入替换为可用标签的内容 用户可以编辑内容 按下回车键时,输入将隐藏并且标签将返回具有更新内容的内容 我最终可以完全正确(实际上是使用MongoBD后端,redux等),而我唯一做不到的事情(花了一整天的时间在Google上搜索和阅读SOF类似的帖子)是: 当我的文字输入出现时,我无法将焦点