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

问题描述 投票:0回答:3

初学者问题:我的任务的最后一部分是更改handle()方法,因此,当单击按钮时,它将返回每加仑计算器英里的结果。当该部分在handle方法之外进行编码时,如何从mi和gal TextField中获取用户输入?

公共类MPGApplication扩展了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);
}

}

java javafx eventhandler
3个回答
2
投票

您可以在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();

这里是,方法局部变量需要在对其进行任何引用(即使用它们)之前进行声明(且大多已初始化)。

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


0
投票

我只是研究Java中的图形界面。

您可以使用getText()方法从TextField中获取文本。您可以使用setText()进行设置。

 @Override
            public void handle(ActionEvent event) {

                double miles = mi.getText();
                double gals = gal.getText();

                double result = //Here's where you code your formula

                gpm.setText(Double.parseDouble(result));

            }

        });

希望它对您有用。


0
投票
@Override
public void start(Stage primaryStage) {
GridPane root = new GridPane();
root.setAlignment(Pos.TOP_CENTER);
root.setHgap(10);
root.setVgap(10);
root.setPadding(new Insets(25, 25, 25, 25));


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.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) {
        double temp = Integer.parseInt(mi.getText());
        double temp2 =Integer.parseInt(gal.getText());
        String temp3=Double.toString(temp/temp2);
        gpm.setText(temp3);
    }
});
root.add(hbBtn, 1, 3);`
primaryStage.show();
}

//首先创建所有标签和场景,然后告诉按钮进行分割工作

© www.soinside.com 2019 - 2024. All rights reserved.