如何使用方法向面板添加按钮并从主要访问它?

时间:2014-09-10 14:50:31

标签: java methods javafx

假设我想创建一个向StackPane添加按钮的方法。然后我想访问该按钮,例如我想从主要添加EventHandler

public class Test extends Application {

    @Override
    public void start(Stage primaryStage) throws ParseException {       

        StackPane root = new StackPane();
        addButton(root);
        // HERE I WANT TO ADD AN EVENT HANDLER TO b BUT I CANNOT ACCESS IT
        // b.addEventHandler(); 
        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public void addButton(StackPane sp){
        final Button b = new Button("Test");
        sp.getChildren().add(b);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

3 个答案:

答案 0 :(得分:1)

创建按钮时将事件处理程序添加到按钮

public void addButton(StackPane sp){
    final Button b = new Button("Test");
    b.setOnAction(new EventHandler<ActionEvent>() {
       @Override 
       public void handle(ActionEvent e) {
                //your logic
       }});
    sp.getChildren().add(b);
}

答案 1 :(得分:0)

由于按钮是addButton的本地按钮,因此您需要引用它。从addButton方法返回按钮的引用并使用它。

以这种方式使用它会更好

public Button addButton(){
     //create Button
}

您可以将此按钮添加到StackPane

中的start()

<强>替代地

不推荐使用此方法。

您可以从StackPane中获取Button

Button  button = (Button)root.getChildren().get(0);

N.B。 只有在确定按钮的位置

时才使用此功能

更新

如果您只想将设计与控件执行的操作分开,JavaFX使用FXML提供了一种方法。

它可以帮助您设计UI而无需放纵他们需要执行的操作。之后,这些FXML可以通过控制器(Java接口)绑定到他们的行为

答案 2 :(得分:0)

将UI控件范围限定为应用程序类的实例,而不是将它们作为方法的本地。

public class Test extends Application {

    private Button b ;

    public void start(Stage primaryStage) throws Exception {
        StackPane root = new StackPane();
        addButton(root);

        b.addEventHandler(...);

        // ...
    }

    private void addButton(Pane pane) {
        b = new Button("Test");
        pane.getChildren().add(b);
    }

    // ...
}

或者,如果您真的想要将布局与事件处理分开,请在FXML中进行布局并将控件注入控制器类,该控制器类可以负责事件处理程序。