2016-12-28 45 views
0

我在父類中用Java中的ActionListener掙扎着,我嘗試了一堆可能的解決方案,但無法實現它。在這裏,這也並沒有幫助: Java actionlistener actionPerformed in different class父類中的ActionListener

的問題如下:

的Class2 延伸 Class1的,我有class2的按鈕。只要按下Class2中的按鈕,就應通過動作偵聽器通知Class1並執行事件。

我在努力讓Class1知道事件已經發生。它對我來說看起來很簡單,但我仍在掙扎。

您的幫助將受到很大的鼓舞,謝謝!

父類

package test; 

//imports removed for better visibility 

public class ParentClass extends JPanel implements ActionListener{ 

JFrame frame; 

public void createParentGui() { 
    frame = new JFrame("Frame"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    final JPanel mainCard = new JPanel(new CardLayout(20, 20)); 
    ChildClass card1 = new ChildClass(); 
    mainCard.add(card1); 

    frame.add(mainCard, BorderLayout.CENTER); 
    frame.pack(); 
    frame.setVisible(true); 

} 

@Override 
public void actionPerformed(ActionEvent e) 
{ 
    System.out.println("Button pressed, action!"); 

} 
} 

子類

package test; 

//imports removed for better visibility 

public class ChildClass extends ParentClass { 

ActionListener listener = null; //this is probably not right, how to do 
//with a local variable when passing it to the parent class? 

public Child() { 
    createGui(); 
} 

private void createGui() { 

    final JButton b = new JButton("press me"); 
    b.addActionListener(listener); 
    add(b); 
} 
} 
+0

如果'Class2'知道一個動作被執行'Class1'應該知道,因爲'Class2'是'Class1'。爲了我們的幫助,你應該包括你的代碼 – SomeJavaGuy

+1

我認爲你應該在Java基礎知識上做一些閱讀。就像理解**對象**是Class2一樣。然後:請提供代碼;截至目前,我們沒有機會幫助這種投入。因此:忍耐[mcve] .... – GhostCat

+0

感謝您的回覆。我添加了顯示問題的示例代碼。 – Doncholio

回答

0

ChildClass具有所有ParentClass做(除了其獨特的屬性和方法)的字段和方法。這就是繼承的工作原理。

因此,由於ParentClassActionListener,這意味着ChildClass也是如此。更具體地說,ChildClass繼承public void actionPerformed(ActionEvent e)方法ParentClass

因此,將b.addActionListener(listener);更改爲b.addActionListener(this)(也可以卸下的ChildClasslistener的字段)

新的代碼將通過「這個」 ChildClass對象b,那麼它將調用actionPerformed(ActionEvent e)每當按下該按鈕。並且由於任何ChildClass對象都有actionPerformed(ActionEvent e)ParentClass,這意味着ParentClass#actionPerformed(ActionEvent)將被調用(如您所期望的)。

+0

感謝特拉維斯,工作!還要感謝詳細的解釋,它刷新了我的繼承類 - 東西。 – Doncholio