2015-09-06 65 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