события javafx не работают - PullRequest
0 голосов
/ 31 мая 2018
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 голосов
/ 31 мая 2018

Конечно, это не работает, вы создаете экземпляр Button при каждом вызове button1() и button2().Экземпляры button1 и button2 в HBox отличаются от экземпляров, которые вы добавили в обработчик событий.

Я определенно рекомендую не разделять то, что вы делаете.Такое разделение затрудняет устранение неполадок, и вы создаете новые экземпляры всякий раз, когда вызываете любой из этих методов.Придерживайтесь того, что вы делаете изначально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...