JavaFX, как обрабатывать ActionEvent из класса контроллера? - PullRequest
0 голосов
/ 21 ноября 2018

Здравствуйте, у меня проблема с обработкой действия моей кнопки: вот мой код:

public class HelloWorld extends Application {
Button btn;
@Override
public void start(Stage primaryStage) {
    btn = new Button();
    btn.setText("Say 'Hello World'");


    StackPane root = new StackPane();
    root.getChildren().add(btn);

    Scene scene = new Scene(root, 300, 250);

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();
} 
public void setButtonOnAction(EventHandler<ActionEvent> acn)
{
   btn.setOnAction(acn);
 }

  }

мой класс контроллера

 public class Controller  {
private  HelloWorld helloWorld;
private  Model model;



public Controller(HelloWorld helloWorld, Model model) throws Exception {
    this.helloWorld = helloWorld;
    this.model = model;

    System.out.println(this.mainView.returnOne());
    this.helloWorld.setButtonOnAction(e->
    {
        System.out.println("CATCH");
            });
}
 }

main runClass:

  public class runExample {





public static void main(String[] args) throws Exception {
    HelloWorld helloWorld = new HelloWorld();
    Model model = new Model();



    Application.launch(helloWorld.getClass(),args);



    Controller controller = new Controller(helloWorld, model);
 }

 }

`

Кто-нибудь знает, почему setButtonOnAction не работает в классе контроллера, а в классе HelloWorld работает отлично?Компилятор не дает мне никакой ошибки.Только если я переключаюсь в класс выполнения следующим образом:

Controller controller = new Controller(mainView, model);
    Application.launch(mainView.getClass(),args); 

это дает мне

Исключение в потоке "main" java.lang.NullPointerException

и если я использую setButtonOnAction в классе HelloWorld, он работает нормально.Можете ли вы помочь мне поймать событие в моем классе контроллера?Я использую jdk8, но на 11 он тоже не работает.

1 Ответ

0 голосов
/ 21 ноября 2018

Рабочий пример;)

public class HelloWorld extends Application {
Button btn;
@Override
public void start(Stage primaryStage) {
btn = new Button();
btn.setText("Say 'Hello World'");


StackPane root = new StackPane();
root.getChildren().add(btn);

Scene scene = new Scene(root, 300, 250);
Controller controller = new Controller(this,new Model()));
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
 } 
 public void setButtonOnAction(EventHandler<ActionEvent> acn)
{
 btn.setOnAction(acn);
 }

 }

И класс выполнения:

  public class runExample {

          public static void main(String[] args) throws Exception {
           Application.launch(HelloWorld.class,args);
          }

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