【问题标题】:Using KeyEvent to activate button - without focus?使用 KeyEvent 激活按钮 - 没有焦点?
【发布时间】:2014-12-26 22:12:41
【问题描述】:

我正在开发一个数据输入 GUI,它有大约 12 个文本字段供用户输入数据,然后用鼠标单击“保存”按钮来保存该数据。

我添加了一个 KeyEvent 来实现,所以当用户按下“Enter”时,它也会保存数据:

//Button Shortcut - Enter/Save
@FXML
public void handleEnterPressed(KeyEvent event) {
    if (event.getCode() == KeyCode.ENTER) {
        saveButton.requestFocus();
        newCard(null);
        event.consume();            
    }
}

这有效 - 如果保存按钮被聚焦。例如,我单击保存按钮,它保存数据。我按“Enter” - 它再次保存数据。如果我浏览所有字段直到焦点回到保存按钮,它将保存。但是,例如,如果我的光标位于其中一个文本字段上并且我点击“Enter”,则不会发生任何事情。 (newCard 是将文本字段数据保存到列表的方法)。

我在控制器中制作了一个新按钮:

 @FXML private Button saveButton;

将 Scene Builder 中的 fx:id 设置为它并尝试使用 .requestFocus(),但它似乎不起作用。但它也不会抛出错误,所以我不确定我是否只是使用不正确。

【问题讨论】:

  • 为什么必须通过保存按钮?为什么不直接从 KeyEvent 的处理程序中调用 save() 方法?
  • 好的,所以我不太确定您所说的“KeyEvent 处理程序”是什么意思,我很确定它已经在这样做了。但是,这让我开始思考为什么我在 SceneBuilder 中将 KeyEvent 绑定到按钮本身……如果我可以将它绑定到其他地方?事实证明,我可以将它绑定到 AnchorPane!所以现在你可以在任何你想要的地方点击“Enter”,它会保存数据。谢谢你让我思考。

标签: java javafx scenebuilder


【解决方案1】:

MarsAtomic 的建议让我想到了不同的方向。我已将 KeyEvent 绑定到 Save 按钮。但是,一旦我将按钮绑定到 AnchorPane 本身,它就开始正常工作了。

【讨论】:

    猜你喜欢
    • 2011-09-13
    • 2019-05-22
    • 1970-01-01
    • 2019-05-25
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2016-03-15
    相关资源
    最近更新 更多