java - 如何将 TextField 信息传递给 handle() 方法

标签 java javafx eventhandler

初学者问题:我的作业的最后一部分是更改handle()方法,这样当单击按钮时,它会返回每加仑英里计算器的结果。当 mi 和 gal 文本字段在句柄方法之外进行编码时,如何从该部分获取用户输入?

public class MPGApplication extends Application {

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Miles Per Gallon");

        Button btn = new Button("Calculate");
        HBox hbBtn = new HBox(10);
        hbBtn.setAlignment(Pos.BOTTOM_LEFT);
        hbBtn.getChildren().add(btn);
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {

            }
        });

        GridPane root = new GridPane();
        root.setAlignment(Pos.TOP_CENTER);
        root.setHgap(10);
        root.setVgap(10);
        root.setPadding(new Insets(25, 25, 25, 25));
        root.add(hbBtn, 1, 3);

        Scene scene = new Scene(root, 300, 250);
        primaryStage.setScene(scene);

        Label miles = new Label("Miles:");
        root.add(miles, 0, 0);
        Label gallons = new Label("Gallons:");
        root.add(gallons, 0, 1);
        Label mpg = new Label("MPG:");
        root.add(mpg, 0, 2);

        TextField mi = new TextField();
        root.add(mi, 1, 0);
        TextField gal = new TextField();
        root.add(gal, 1, 1);
        TextField gpm = new TextField();
        gpm.setEditable(false);
        root.add(gpm, 1, 2);

        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

最佳答案

您可以在 Button 的 setOnAction 方法上方声明并初始化 TextField,这将使 TextField 实例对按钮处理程序方法可见。

或者为了保持更好的可读性 - 只需将处理方法移到底部,例如:

btn.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        System.out.println(mi.getText());
        System.out.println(gal.getText());
        System.out.println(gpm.getText());
    }
});
primaryStage.show();

这里的问题是,方法局部变量需要在对它们进行任何引用(即使用它们)之前进行声明(并且主要是初始化)。

在类中,您可以在类定义的底部声明成员(但实践是在顶部声明它们)。

关于java - 如何将 TextField 信息传递给 handle() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60123870/

相关文章:

c++ - 鼠标事件选择器openscenegraph

java - 如何对一条线进行动画着色,就像 JavaFX 中通过的信号一样

JavaFX - 边框半径<->背景颜色

java - 如何使用对象创建 JavaFX 树

c# - 如何在 Java 中处理用户控件(如 JList)的事件

javascript - 如何在js中让桨移动

java - 尝试连接到串行端口时使用 javax.swing.SwingWorker 时出现问题

java - 尝试生成 JAXWS 时出现 SchemaFactoryConfigurationError

java - 更改 listView 中特定行项目的布局

java - 在 Java 中将所有成员设置为私有(private)或公共(public)访问模式