2011-05-31 49 views
1

在Java代碼:的Java:創建時括號類名稱對象實例

// Define ActionListener 

ActionListener actionListener = new ActionListener() { 

public void actionPerformed(ActionEvent actionEvent) { 

     JButton button = **(JButton)actionEvent.getSource();** 
     int red = random.nextInt(255); 
     int green = random.nextInt(255); 
     int blue = random.nextInt(255); 
     button.setBackground(new Color(red, green, blue)); 

    } 
}; 

什麼是突出(****之間)的代碼嗎?

我發現很難研究這個問題,因爲我不知道使用什麼搜索術語。 :o

希望任何人都可以提供幫助。 TIA

+1

你讀過['ActionEvent' javadoc](http://download.oracle.com/javase/6/docs/api/java/awt/event/ActionEvent.html)? 'getSource'上的javadoc表示它返回「事件最初發生的對象」。這似乎很清楚。你不明白的是什麼? – MarcoS 2011-05-31 09:28:03

回答

6

這是鑄造對象返回actionEvent.getSource()JButton

您可以通過herehere瞭解一些信息。

0

它得到了你的動作的來源,它假定它是一個JButton,並將你的動作事件的源代碼投射到JButton類。

0

ActionEvent對象表示用戶操作。根據你的代碼,這個動作已經在JButton上執行了。該對象有一個getSource()方法,用於發回發起該事件的對象。但是,因爲任何事情都可以發送這樣的事件,所以getSource()返回一個無類型的對象。你需要將它轉換回原來的類型(Jbutton)才能使用這個源代碼(在這個CAS中設置它的背景)。

檢查http://download.oracle.com/javase/1.4.2/docs/api/java/util/EventObject.html#getSource()

0

有趣的是它被稱爲(JButton)。您可以使用強制類型轉換,如果你是絕對相信,A類的對象(以下稱爲「富」),您已獲得確實的B類的實例,那麼你可以只寫

B bar = (B) foo; 

和然後根據需要使用bar變量。但請注意,如果foo實際上不是B的實例,則運行時將拋出ClassCastException。您可能也有興趣閱讀instanceof關鍵字。

0

它被稱爲類「鑄造」。 actionEvent.getSource()不僅可以返回JButton,還可以返回其他小部件。所以他們決定「讓我們返回Object,因爲所有東西都適合在那裏,並且讓開發者告訴Java他期望的東西」,在之前(JButton),你會說「我確定動作事件的來源是JButton,我想要來訪問它像一個JButton「