在 JavaFX 中有效创建多个按钮
Effective creation of the multiple buttons in JavaFX
我打算在我的 GUI 上构建一个包含大约 12 个独立按钮的窗格,每个按钮都有不同的名称、文本和 ActionEvent 反应。这是每个按钮的模式:
Button compB = new Button();
compB.setText("BtnText");
compB.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("ADD_INPUT_LINK");
}
});
我想知道是否有一种方法可以使用一个流(或多个流)来为每个按钮分配一个不同的名称、文本和 ActionEvent。
也许有 3 个不同的流,其中的元素具有可用于绑定的可识别 int?
如有任何帮助,我们将不胜感激。
除非您从文件或其他来源读取这些流并且可以在循环中初始化按钮,否则您不会从使用它们中受益。
如果您只想缩短代码,可以使用工厂方法。像这样:
public class Buttons extends Application {
@Override
public void start(Stage primaryStage) {
VBox root = new VBox();
Scene scene = new Scene(root, 300, 250);
doButton(root, "hi", ()->{System.out.println("hi");});
doButton(root, "hoi", ()->{System.out.println("1");});
doButton(root, "hei", ()->{System.out.println("2");});
doButton(root, "hai", ()->{System.out.println("3");});
doButton(root, "hio", ()->{System.out.println("4");});
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static Button doButton(Pane owner, String name, final Runnable handler) {
Button compB = new Button();
compB.setText(name);
compB.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
handler.run();
}
});
owner.getChildren().add(compB);
return compB;
}
}
我打算在我的 GUI 上构建一个包含大约 12 个独立按钮的窗格,每个按钮都有不同的名称、文本和 ActionEvent 反应。这是每个按钮的模式:
Button compB = new Button();
compB.setText("BtnText");
compB.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("ADD_INPUT_LINK");
}
});
我想知道是否有一种方法可以使用一个流(或多个流)来为每个按钮分配一个不同的名称、文本和 ActionEvent。 也许有 3 个不同的流,其中的元素具有可用于绑定的可识别 int?
如有任何帮助,我们将不胜感激。
除非您从文件或其他来源读取这些流并且可以在循环中初始化按钮,否则您不会从使用它们中受益。
如果您只想缩短代码,可以使用工厂方法。像这样:
public class Buttons extends Application {
@Override
public void start(Stage primaryStage) {
VBox root = new VBox();
Scene scene = new Scene(root, 300, 250);
doButton(root, "hi", ()->{System.out.println("hi");});
doButton(root, "hoi", ()->{System.out.println("1");});
doButton(root, "hei", ()->{System.out.println("2");});
doButton(root, "hai", ()->{System.out.println("3");});
doButton(root, "hio", ()->{System.out.println("4");});
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static Button doButton(Pane owner, String name, final Runnable handler) {
Button compB = new Button();
compB.setText(name);
compB.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
handler.run();
}
});
owner.getChildren().add(compB);
return compB;
}
}