2015-09-06 5 views
0

Я новичок в Java и, когда я проходил обработку событий, я не мог понять, как работает обработчик событий. Я постараюсь изо всех сил объяснить свой вопрос. Предположим, у меня есть следующий код, который просто запустить приложение JavaFX и рисует линию и кнопку на сцене:Как работает обработчик событий?

public class Understanding extends Application 
{ 

    Linepane lpane = new Linepane(); 


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


    } 

    @Override 
    public void start(Stage stage) throws Exception 
    { 


     Button bt = new Button("change"); 
     stage.setTitle("Understand"); 
     BorderPane bpane = new BorderPane(); 
     bpane.setBottom(bt); 
     bpane.setCenter(lpane); 
     bt.setOnAction(new Handler()); 
     Scene scene = new Scene(bpane, 300, 300); 
     stage.setScene(scene); 
     stage.show(); 

    } 
    public class Handler implements EventHandler<ActionEvent> 
    { 

     @Override 
     public void handle(ActionEvent arg0) 
     { 

      lpane.change(); 

     } 

    } 
} 

public class Linepane extends StackPane 
{ 
    Line line = new Line(1,1,50,50); 

    public Linepane() 
    { 

     this.getChildren().add(line); 
    } 

    public void change() 
    { 
     line.setEndX(100); 
     line.setEndY(100); 
    } 
} 

Все это программа делает это нарисовать линию и изменить длину линии по нажатию на кнопку Изменить, но как возможно, как только запускается метод запуска программы, и код запускается от первой строки до последней строки, которая показывает этап (stage.show()), и как он может изменить длину строки, вся программа запускается снова, когда или программа просто остается в строке, которая говорит, что делать, когда нажимается кнопка и запускает эту часть кода, как только нажимается кнопка?

ответ

0

после Application.launch(args) прикладной поток JavaFX построен. Внутри этой прикладной нити будет создан объект типа Understanding (и Stage). После создания сделано. Понять # start (..) будет вызываться и обрабатываться до этапа stage.show().

После вызова stage.show() поток приложений JavaFX все еще запущен и обрабатывает события ввода пользователей. Когда пользователь нажимает кнопку bt, прикладной поток JavaFX обрабатывает это событие и вызывает метод дескриптора объекта Handler.

Ваша программа не будет запущена и снова запущена до stage.show(), только поток приложений JavaFX запускается снова и снова и прослушивает события. Для каждого соответствующего события он вызывает соответствующие методы вашего приложения.

для получения более подробной информации: http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html