2014-03-19 52 views
0
private class MyCustomButton extends JButton{...} 
private class MyCustomButton2 extends MyCustomButton{...} 

public class Example1 extends JPanel{ 
    Example1{ 
    MyCustomButton b1=new MyCustomButton("0"); 
    MyCustomButton2 b2=new MyCustomButton1("b2"); 
    } 
    private class ButtonListener implements ActionListener//, KeyListener 
    { 
    public void actionPerformed(ActionEvent e) 
    { 
     System.out.println(e); 
    } 
} 

在上面的例子中,我有2個JButton,一個是自定義的,第二個擴展了第一個。如何從Action Listener中獲取java中的按鈕(JButton)的類或類型?

java.awt.event.ActionEvent[ACTION_PERFORMED,cmd=0,when=1395217216471,modifiers=Button1] on **Example1.MyCustomButton**[,165,0,55x55,alignmentX=0.0,alignmentY=0.5,[email protected],flags=16777504,maximumSize=,minimumSize=,preferredSize=,defaultIcon=pressed.png,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=0,defaultCapable=true] 

爲了實現我的動作監聽器,我從打印輸出java知道能夠返回按下的按鈕類,我該怎麼做?

編輯1: 我的目標是實現一個gui,它有2個類的按鈕,如果點擊了一個按鈕,我有一組操作,反之亦然,希望它會簡化我的動作偵聽器實現。

+1

被捉住你應該考慮使用的[動作API(http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html) ,依靠類的類型是錯誤的... – MadProgrammer

+0

不相關:不擴展任何JSomething,它們被設計爲使用原樣 – kleopatra

回答

1

ActionEvent提供了觸發事件的source的引用,在你情況下,這將JButton

你可以簡單地檢查哪個按鈕由源與已知的基準進行比較觸發事件,但它會更簡單,以利用按鈕actionCommand屬性...

if ("name of action".equals(source.getActionCommand())) {... 

這假定您設置的按鈕actionCommand財產。

如果做不到這一點,你在下面的文本......

JButton btn = (JButton)e.getSource(); 
if ("0".equals(btn.getText()) {... 

就個人而言,這只是自尋煩惱,因爲你可能有多個名稱相同的按鈕。最好使用按鈕actionCommand屬性。

一個更好的解決辦法是隻使用actions API,這是攜帶與它的配置信息,然後你不在乎的動作的自給自足的概念...

1

e.getSource().getClass().getName()返回按鈕類的全名。

但是你爲什麼要這樣做?

0

使用actionPerformed()ActionEventgetSource()方法:

if(e.getSource() instanceof MyCustomButton){ 

} else if(e.getSource() instanceof MyCustomButton1){ 

} else { 

} 
0

試試下面的代碼

if(e.getSource().getClass()==MyCustomButton.class) 

,使其代替

if(e.getSource().getClass().getName.equals("com.x.y.z.MyCustomButton")) 

性能更加強大:

  • 如果將來您更改了類MyCustomButton的包,那麼它也會正常工作。在包
  • 變化在編譯時
相關問題