2014-07-23 56 views
1

如果我有擴展JButton並實現ActionListener的類A並執行特定的默認操作。然後,我有擴展類A的B類,我希望它做同樣的動作,加上別的東西。我如何着手擴展A類的actionPerformed方法?如何在擴展JButton類時擴展actionPerformed方法

A類:

class AButton extends JButton implements ActionListener { 
    AButton() { 
     addActionListener(this); 
    } 
    @Override 
    public void actionPerformed (ActionEvent aEvent) { 
     methodA(); 
    } 
} 

B類:

class BButton extends AButton { 
    BButton() { 
     super(); 
     addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent aEvent) { 
       methodB(); 
      } 
     }); 
    } 
} 
+0

你並不需要延長的JButton,只需創建一個動作,並把它應用到的第一個按鈕,延續原來的行動,其修改行爲,並將其應用到第二個按鈕 – MadProgrammer

回答

2

您可以覆蓋了methodA(),而不是的actionPerformed()調用

protected void methodA() { 
    super.methodA(); 
    //additional actions here 
} 
+0

這個答案效果最好,最簡單。謝謝。 –

1

我希望它做同樣的動作,加上別的東西。

您可以在同一JButton添加多個ActionListener並在單擊按鈕時都將解僱,但要確保聽衆的順序不是預定義的,不應該。

永遠不要擴展任何內置類,除非您需要覆蓋現有功能。

class AButton extends JButton implements ActionListener { 
    AButton() { 
     addActionListener(this); 
    } 

    @Override 
    public void actionPerformed (ActionEvent aEvent) { 
     methodA(); 
     methodB(); 
    } 

    public void methodB(){ 
     // nothing here, no code 
     // you can make this method abstract if needed 
    } 
} 

class BButton extends AButton { 

    @Override 
    public void methodB(){ 
     // add more code here specific to this class 
    } 
} 
+0

您是否說通過參與創建自定義swing組件,而是創建它們的實例並添加功能? –

+0

讓我爲您提供一些解決方案,使用您當前的代碼。 – Braj

+0

看看更新的代碼。 – Braj

0

我覺得這是不可能的:

如果你想以同樣的方式做,然後嘗試一些這樣的事瞭解更多關於Favor Composition over inheritance Principle


。你不能繼承一個匿名類。您應該編寫一個實現ActionListener的動作處理程序,然後從這個處理程序擴展到第二個類。