JavaFX8 - FXML如何使用onAction-tag中的参数调用方法?

S.P*_*Pro 4 java textfield fxml javafx-8

如何用FXML中的参数调用方法?

在Java中我使用以下代码:

textfield.setOnAction(event -> {
    endEdit(false);
});
Run Code Online (Sandbox Code Playgroud)

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

<TextField onAction="#endEdit">
Run Code Online (Sandbox Code Playgroud)

那么如何endEdit(Boolean)用参数调用FXML中的方法false呢?

dic*_*c19 7

您可以将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
    }  
}
Run Code Online (Sandbox Code Playgroud)

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

<TextField onAction="#handleTextFieldAction" />
Run Code Online (Sandbox Code Playgroud)

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

  • 别客气.它会很好但是:*"通常,处理程序方法应该符合标准事件处理程序的签名;也就是说,它应该采用扩展javafx.event.Event的类型的单个参数并且应该返回void(类似C#中的事件委托.事件参数通常包含有关事件性质的重要且有用的信息;但是,它是可选的,如果需要可以省略."*从[此处]提取(http:// docs. oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html#controller_method_event_handlers)(也适用于JavaFX8)@ S.Pro (2认同)