【问题标题】:JavaFX8 - FXML How to call method with parameters in onAction-tag?JavaFX 8 - FXML 如何在 Action-tag 中使用参数调用方法?
【发布时间】:2023-04-08 15:45:01
【问题描述】:

如何使用 FXML 之外的参数调用方法?

在 Java 中我使用以下代码:

textfield.setOnAction(event -> {
    endEdit(false);
});

在 FXML 中我知道我可以调用这样的方法:

<TextField onAction="#endEdit">

那么如何在 FXML 中使用参数false 调用方法endEdit(Boolean)

【问题讨论】:

    标签: java textfield javafx-8 fxml


    【解决方案1】:

    您可以将endEdit(...) 方法调用封装在处理动作事件的@FXML 注释方法中。像这样的:

    public class FXMLController implements Initializable {
    
        @FXML
        protected void handleTextFieldAction(ActionEvent e) {
            endEdit(false);
        }
    
        private void endEdit(boolean flag) {
            System.out.println("Flag value: " + flag);
            // Your implementation here
        }
    
        @Override
        public void initialize(URL url, ResourceBundle rb) {
            // TODO
        }  
    }
    

    然后在您的 FXML 文件中将文本字段的 onAction 属性绑定到此 handleTextFieldAction(...) 方法,如下所示:

    <TextField onAction="#handleTextFieldAction" />
    

    如果布尔标志实际上取决于必须评估的某些条件,那么您可以在 handleTextFieldAction(...) 方法中处理它们并使用适当的值调用 endEdit(...)

    【讨论】:

    • 感谢您的回答。我认为有一种方法可以直接从 FXML 中调用该方法,因此需要的代码会更少。
    • 不客气。很好,但是:“一般来说,处理程序方法应该符合标准事件处理程序的签名;也就是说,它应该采用扩展 javafx.event.Event 的类型的单个参数并且应该返回 void (类似于 C# 中的事件委托)。事件参数通常包含有关事件性质的重要且有用的信息;但是,它是可选的,如果需要可以省略。” 提取 from here(适用于JavaFX8)@S.Pro
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多