2015-09-06 41 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)類型的對象。創建完成後,將會調用Understand#start(..)並處理,直到stage.show()。

在stage.show()調用之後,JavaFX應用程序線程仍在運行並處理用戶輸入事件。當用戶單擊按鈕bt時,JavaFX應用程序線程將處理此事件並調用Handler對象的句柄方法。

你的程序將無法運行並達到stage.show()再次運行,只有JavaFX應用程序線程一次又一次地運行,並監聽事件。對於每個匹配事件,它會調用您的應用程序的匹配方法

瞭解更多詳情:http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html

相關問題