如何将 TextField 信息传递给 handle() 方法
How to pass TextField info to handle() method
初学者问题:我作业的最后一部分是更改 handle() 方法,因此当单击按钮时,它 returns 计算器计算每加仑英里数的结果。当该部分在 handle 方法之外编码时,如何从 mi 和 gal TextFields 获取用户输入?
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();
这里的问题是,方法局部变量需要在对它们进行任何引用(即使用它们)之前声明(并且主要是初始化)。
在 class 中,您可以在 class 定义的底部声明成员(但实践是在顶部声明它们)。
@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();
}
//先创建所有标签和场景,然后告诉按钮做分割工作
初学者问题:我作业的最后一部分是更改 handle() 方法,因此当单击按钮时,它 returns 计算器计算每加仑英里数的结果。当该部分在 handle 方法之外编码时,如何从 mi 和 gal TextFields 获取用户输入?
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();
这里的问题是,方法局部变量需要在对它们进行任何引用(即使用它们)之前声明(并且主要是初始化)。
在 class 中,您可以在 class 定义的底部声明成员(但实践是在顶部声明它们)。
@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();
}
//先创建所有标签和场景,然后告诉按钮做分割工作