Elizah
Elizah

Reputation: 15

javafx events not working

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

You can see that this is a javafx Testing class where I am testing eventHandlers and it works fine but when I split the code and add it into on its own methods then the eventHandlers does not work like in the code below

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

Now this code does not work. Please help. Please note: If any one have another idea to encapsulate eventHandlers then please mention it if you can because my goal is to define eventHandlers in one class and registering it in another class. Thank you.

Upvotes: 0

Views: 498

Answers (1)

Jai
Jai

Reputation: 8363

Of course it's not working, you are creating an instance of Button every call to button1() and button2(). The instance of button1 and button2 in the HBox are different instances from the one you added the event handler.

I definitely recommend not splitting like what you are doing. This kind of splitting makes it hard to troubleshoot problems, and you are creating new instances whenever you call any of those methods. Stick to what you are doing originally.

Upvotes: 3

Related Questions