2016-01-01 22 views
-2

裏面我actionPerformed方法我的代碼以下兩個行,鑄造的JMenuItem

JButton pressed =(JButton)e.getSource(); 
JMenuItem pressedSave = (JMenuItem)e.getSource(); 

這是爲什麼不允許?我得到以下編譯器錯誤

異常在線程 「AWT-EventQueue的-0」 java.lang.ClassCastException:javax.swing.JButton中的不能轉換到javax.swing.JMenuItem中

我需要能夠獲得JButtonJMenuItem的文字。我怎樣才能做到這一點?

回答

1

錯誤非常明顯。您正嘗試將Jbutton分配給JMenuItem

你得到的線2,這意味着線1是完美無瑕的,這也意味着e.getSource()JButton,而不是一個JMenuItem錯誤。

你可以做的是使用instanceof運營商,以確定哪個組件觸發事件:

Object comp = e.getSource(); 

if(comp instanceof JButton) { 
    // A JButton triggered the event 
    JButton pressed =(JButton) comp; 

    // Do something with your 'pressed' button 
} 
else if(comp instanceof JMenuItem) { 
    // A JMenuItem triggered the event 
    JMenuItem pressedSave = (JMenuItem) comp; 

    // Do something with your 'pressedSave' menu item 
} 
+0

雖然我不明白,我如何試圖給jmenuitem分配jbutton?它是一個全新的對象。我將如何解決這個問題? – ugCode

+0

@ugCode它是一個全新的對象,它是事件的來源。 – luk2302

+0

@ugCode檢查我的編輯。 –

1

你沒有得到一個編譯器錯誤。

它是「允許」,它只是不起作用。

如果它不被允許,那麼編譯器會抱怨。

但你在這裏得到的是一個RuntimeException,因爲你一個JButton這根本無法轉換爲JMenuItem。他們是不相關的類型 - 這兩者之間的轉換/投射應該如何?

可以做的是JButtonJMenuItem投什麼類型都以他們共同的超AbstractButton

1

JMenuItem不是JButton的子類,但是您可以同時投射到AbstractButton。這可能取決於你想要做什麼