javafx事件不起作用

时间:2018-05-31 02:02:53

标签: java events javafx

public class Testing extends Application {



    @Override
    public void start(Stage stage) 
    {

        Button button1 = new Button("First button");

        Button button2 = new Button("Second button");

        EventHandler<ActionEvent> aHandler = new EventHandler<ActionEvent>(){
            @Override
            public void handle(ActionEvent event)
            {
                button2.setText("Working");
            }
        };


        button1.addEventHandler(ActionEvent.ACTION, aHandler);

        HBox hbox = new HBox(40,button1, button2);
        Scene scene = new Scene(hbox, 840, 400);                
        stage.setScene(scene);
        stage.setTitle("Testing");
        stage.show();

    }

    public static void main(String[] args)
    {
        launch(args);
    }
}

你可以看到这是一个javafx测试类,我正在测试eventHandlers,它工作正常但是当我拆分代码并将其添加到自己的方法中时,eventHandlers不能像下面的代码一样工作

public class Testing extends Application {



    @Override
    public void start(Stage stage) 
    {

        EventHandler<ActionEvent> aHandler = new EventHandler<ActionEvent>(){
            @Override
            public void handle(ActionEvent event)
            {
                button2().setText("Working");
            }
        };
        button1().addEventHandler(ActionEvent.ACTION, aHandler);


        stage.setScene(scene());
        stage.setTitle("Testing");
        stage.show();

    }

    public Button button1()
    {
        Button btn = new Button("First button");
        return btn;     
    }


    public Button button2()
    {
        Button btn = new Button("Second button");
        return btn;
    }



    public HBox hbox()
    {
        HBox hbox = new HBox(40,button1(), button2());
        return hbox;
    }

    public Scene scene()
    {
        Scene scene = new Scene(hbox(), 840, 400);

        return scene;
    }


    public static void main(String[] args)
    {
        launch(args);
    }
}

现在这段代码不起作用。请帮忙。 请注意:如果任何人有另外的想法来封装eventHandlers,那么请提及它,如果可以,因为我的目标是在一个类中定义eventHandlers并在另一个类中注册它。 谢谢。

1 个答案:

答案 0 :(得分:3)

当然它不起作用,您每次拨打Buttonbutton1()时都会创建button2()个实例。 button1button2HBox的实例与您添加事件处理程序的实例不同。

我绝对建议不要像你正在做的那样分裂。这种拆分使得很难解决问题,并且无论何时调用任何这些方法,都会创建新的实例。坚持你原来做的事情。