在JavaFX中有效创建多个按钮

时间:2015-12-27 10:19:51

标签: lambda uibutton javafx-8 java-stream actionevent

我想在我的GUI上构建一个包含aprox 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,我可以用它来绑定?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

除非您正在从文件或其他来源读取这些流,并且可以在循环中使用init按钮,否则您将无法使用它们。

如果您只想使用更短的代码,可以使用工厂方法。像这样:

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;
    }
}