2014-06-08 49 views
0

我對Java很陌生,對ActionEvent類感到困惑。ActionEvent混淆

我的印象是,使用一個類,你必須創建例如一個新對象下:

SomeClass aClass = new SomeClass(); 

但在這一段代碼:

private class theHandler implements ActionListener{ 

    public void actionPerformed(ActionEvent event){ 
     Event.getSource() 
     // etc... 
    } 
} 

爲什麼你不」 t需要:

ActionEvent event = new ActionEvent(); 

事件成爲ActionEvent類的一個實例而沒有明確很明確地告訴它。 對不起,這是一個愚蠢的問題,我正在教我自己的Java,這對我來說是徹底的困惑。

+0

我想'Event.getSource()'應該是'event.getSource()'。原始文章中的代碼(編輯之前)由於大寫字母的使用不正確而無法編譯。 – wvdz

回答

2

動作事件在某處創建的,但它不是由您明確創建的。相反,它是在JButton的代碼中創建的(實際上代碼位於AbstractButton類中,是JButton的父類),用於通知所有ActionListener偵聽器已連接到它。如果您願意,您可以查看源文件以查看詳細信息。

0

這真的很簡單,有一個叫靜態方法的東西。這些是您可以在課堂上使用的方法,而無需製作它們的對象。

像數學類和所有它的函數fx。靜態方法看起來是這樣的:

public class HiClass { 
    public static String sayHi() { 
     return "Hi!"; 
    } 
} 

你會那麼像這樣的一些背景使用它:

System.out.println(HiClass.sayHi()); 

這將打印出來的字符串控制檯中的方法返回。

你可能會問:「爲什麼我不能讓我所有的方法在我的類中靜態呢?」有很多原因,我能想到的主要原因是,當你編程時,你總是試圖將責任重新分配給有意義的類,以便代碼更易於管理,並且隨着程序的增長更容易改變。

這不是特定於您提到的上下文,但在我看來,您真正的問題是如何在不創建對象的情況下使用方法?

希望它回答你的問題?

1

當您在Java中使用implements時,您所做的就是使用interface。接口需要在您的代碼中實現某些方法,並提供一種方法來確保實現某個接口的新類具有可以調用的方法。

因此,在例如:

private class theHandler implements ActionListener{ 

    public void actionPerformed(ActionEvent event){ 
     event.getSource() 
     // etc... 
    } 
} 

ActionListener接口正在由theHandler,因此該方法實現,actionPerformed(ActionEvent event)需要由你的類來實現。此處沒有明確的ActionEvent event = new ActionEvent();,因爲ActionEvent實際上是作爲參數傳遞給actionPerformed,否則會在其他位置創建。

專門爲你的榜樣,你也可以做以下的,而不是使用你的類implements關鍵字:

public class theHandler { 
    public theHandler() { 
     JButton button = new JButton(); 
     button.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       // do some stuff here 
      } 
     }); 
    } 
}