2012-01-20 22 views
1

我選擇了在單擊鼠標時在屏幕上打印「Hello World」的基本示例代碼如下所示。EventHandler <T擴展事件>在JavaFX中的一個類或接口

package sample; 

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

/** 
* 
* @author gauravp 
*/ 
public class Sample extends Application { 

    /** 
    * @param args the command line arguments 
    */ 
    Button btn = new Button("ok"); 
    //Label l = new Label("Done"); 

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

    @Override 
    public void start(Stage primaryStage) { 

     primaryStage.setTitle("First Stage"); 


     //Created anonymous inner class EventHandler<ActionEvent> 
     btn.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 

        System.out.print("Hello World !!"); 


      } 
     }); 

     StackPane root = new StackPane(); 
     root.getChildren().add(btn); 
     primaryStage.setScene(new Scene(root, 300, 250)); 
     primaryStage.show(); 
    } 
} 

在文件中提到,事件處理程序是一個接口,但怎麼來的界面被實例化......

「新的EventHandler <動作事件>()」

在很多困惑....請回復,如果你有任何想法..這裏是鏈接 EventHandler接口: http://docs.oracle.com/javafx/2.0/api/javafx/event/EventHandler.html

+0

請谷歌爲匿名內部類。 –

+0

@Sachin Karjatkar匿名內部類的功能很明顯,但關於在實例化時使用EventHandler接口的困惑,如果它本來是一個類,沒有probs .. – cbinder

+1

我不是在談論內部類,這是匿名的。基本上你爲這個EventHandler接口提供了一個匿名實現。請參閱http://www.roseindia.net/javatutorials/anonymous_innerclassestutorial.shtml –

回答

4

語法

new EventHandler<ActionEvent>() { 
     @Override // <- notice the annotation, it overrides from the interface. 
     public void handle(ActionEvent event) { 
       System.out.print("Hello World !!"); 
     } 
    } 

創建一個實現EventHandler的「匿名內部類」,並定義句柄方法。如果您檢查編譯項目時生成的類,您可能會發現一個名爲Sample $ 1(或類似)的類文件,它是爲此代碼生成的類。

您可以在內部(匿名)班在這裏讀了起來:http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html

要回答你的問題:事件處理程序是一個接口,而這個代碼不實際創建它的實例,但新的實例宣佈匿名課程。

1

你所看到的是anonymous inner class

它是「現場」接口的實現,無需創建一個具有實現接口的名稱的單獨類。

匿名內部類通常用於GUI組件的事件處理程序,如示例代碼所示。

相關問題