2013-01-14 30 views
2
@Override 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == thirdBtn) { 
      //System.out.println("Third Button Click"); 
      System.out.println(e.getSource()+" Click"); 
     } 
    } 

獲得一個JButton的名字在上面的代碼,我想知道的,如果不是這樣做:上點擊

//System.out.println("Third Button Click"); 

,如果我可以做這樣的事情:

System.out.println(e.getSource()+" Click"); 

然而代碼輸出:

BlackJack.OverBoard$BlackJackButton[,440,395,100x25,alignmentX=0.0,alignmentY=0.5, 
    bo[email protected]7a3d8738, 
    flags=16777504,maximumSize=,minimumSize=,preferredSize=, 
    defaultIcon=,disabledIcon=,disabledSelectedIcon=, 
    margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14], 
    paintBorder=false,paintFocus=true, 
    pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=, 
    text=Change,defaultCapable=true] Click 

我不想要這個,我想知道如何獲得JButton的名稱,並點擊輸出它。

編輯:

有些人感到困惑。當我說「名」(也許這就是它打錯字了),我的意思是說你初始化JButton

JButton btnExample = new JButton(); 

我希望它這樣,當你按一下按鈕,它在控制檯輸出btnExample

+2

不能做......你現在的方式。你有三個選擇。你可以使用'JButton#setText'和'JButton#getText'這是顯示在屏幕上的文本,'JButton#setName'和'JButton#getName'這是一個內部的'String'引用,所以它可以是任何你或者,你可以創建你自己的自定義按鈕並修改'toString'方法 - 這是不推薦的...... – MadProgrammer

+3

*「我想要它,所以當你點擊按鈕時,它會在控制檯輸出'btnExample'。 *由於這些信息可能對GUI的最終用戶不可見,並且如果他們看到它們對他們來說毫無意義,看起來這個用例指的是在開發過程中運行的代碼。我建議這裏實際需要的是一個調試器,也許還有一些日誌記錄。 –

+0

@AndrewThompson我明白這一點,但這只是我想知道的教育目的。謝謝 – Exikle

回答

11

您可以轉換爲一個JComponent,如果你知道,只有JComponents將是e.getSource()的返回值我使用JComponent作爲演員,因爲它提供了更多的靈活性。如果您只使用JButtons,則可以安全地轉換爲JButton

@Override 
      public void actionPerformed(ActionEvent e) { 
       if (e.getSource() == thirdBtn) { 
        //System.out.println("Third Button Click"); 
        System.out.println(((JComponent) e.getSource()).getName()+" Click"); 
       } 
      } 

隨意與getText()更換getName(),這依賴於你所需要的。

另外,==運算符只應用於比較對象引用,因此可以考慮從頭開始將其轉換爲JComponent並在名稱或文本上使用.equals()

編輯 你不能輸出變量的名字,但你可以設置JComponent的名稱/文本。 如

JButton btnExample = new JButton(); 
btnExample.setName("btnExample"); 

或者,如果你想「btnExample」實際顯示的按鈕:

JButton btnExample = new JButton(); 
btnExample.setText("btnExample"); 
+1

(雖然我知道OP已經說過「名稱」,但大多數開發人員從未設置過組件「名稱」,相反,你可能想要包括一個例子,使用'getText'以及...恕我直言) – MadProgrammer

+0

@AC不是down-voter – MadProgrammer

+0

@MadProgrammer你只是得到自動通知,對不起!我懷疑它不得不與我一起忘記'e',但是誰知道? –

6
System.out.println(((JButton) e.getSource()).getName() + " Click"); 
+0

謝謝,但這不是我的意思:(我要求如何獲得對象的名稱JButton btn;所以當我打電話給它的評論輸出「btn」 – Exikle

+1

@Exikle定義「名稱」。預計將被打印?? – MadProgrammer

+0

@MadProgrammer更新了問題來解釋它 – Exikle