2013-08-26 31 views
-2

一個類,所以我有這個類:的Java - 似乎無法給addActionListener方法,到包含的JButton

class Button extends JButton 
{ 
    private int x; 
    private int y; 
    public Button(int x,int y, int size, JLayeredPane pane) 
    { 

     JButton b = new JButton(); 
     pane.add(b, new Integer(0)); 
     b.setBounds(x,y,size,size); 

    } 
} 

此,雖然並沒有做很多工作的。但我想要它將類ActionListener添加到類中的jbutton。但我似乎無法得到這個工作。如果我嘗試在課堂外添加它,它不會給出錯誤,但似乎也沒有做任何事情。我試過各種東西,比如傳入JFrame ......

對於更多的上下文,這是一個掃雷遊戲。也JFrame中使用的layeredPane

+0

請說明您的具體問題或添加額外的細節,突顯正是你需要的。正如目前所寫,很難確切地說出你在問什麼。 (從標誌對話框複製) – gparyani

+0

你如何調用'addActionListener()'? – gparyani

+2

同意你的問題很不清楚。請讓我們知道更多關於它是不是工作。有一件事我可以告訴你,這個類不應該擴展JButton。 –

回答

1

構造:

public Button(int x,int y, int size, JLayeredPane pane) 
{ 
    //The whole premise of have a constructor that declares a JButton inside 
    //a JButton doesn't really make any sense, but: 
    super(); 

    JButton b = new JButton(); 
    pane.add(b, new Integer(0)); 
    b.setBounds(x,y,size,size); 

    b.addActionListener(new ActionListener(){ 

    public void actionPerformed(ActionEvent e){ 
     System.out.println("Button Clicked"); 
    } 
    } 
} 

在你的按鈕構造這只是聲明一個新的JButton。

話雖如此,看起來你不明白你寫的代碼是如何工作的。當你擴展JButton時,你通過繼承獲得了它的所有方法。 public Button()是你的Button類的構造函數,你不需要在裏面聲明JButton,Button已經是JButton了。你需要做的是,在另一個班級中,執行Button b = new Button();之類的操作,然後在按鈕上聲明你的actionlistener。

查閱這些資源,瞭解更多信息:

JButton api

How to use buttons

+0

注意Grammin是不擴展JButton! –

+0

注意Grammin提供了一個構造函數。構造函數不會擴展任何東西。也就是說,他的構造函數應該叫「超級」。 – dimo414

+0

感謝您的快速回復。是的,我嘗試了很多東西,並且很困惑,於是開始不必要地擴展類。 b.addActionlistener這一行(新的ActionListener ...正是我正在尋找的東西,非常感謝。通常當我添加按鈕時:addActionListener(this),因爲它在JFrame子類中......否則永遠不知道該怎麼做 – Makoto