2013-04-01 127 views
1

我爲我的程序製作了一個面板。它僅由RadioButtons組成。當選擇一個單選按鈕時,我想在其他代碼中設置一個布爾值。此面板將用作更大面板或框架的組件,該面板或框架也應能夠聆聽此面板內發生的事件。將ActionListener添加到Panel - Panel實現ActionListener vs Panel HAS A ActionListener

因此,下列哪些選項應該我選擇監聽事件 -

1 -

RadioButtonPanel extends JPanel implements ActionListener{ 

    public void actionPerformed(ActionEvent e){} 
    //code to add the action listener to the radio buttons 
    oneRadioButton.addActionListener(this); 
} 

2 -

RadioButtonPanel extends JPanel{ 

    class InnerStrength implements ActionListener{ 
    public void actionPerformed(ActionEvent e){} 
    }  

    //code to add the action listener to the radio buttons  
    oneRadioButton.addActionListener(Anonymous InnerStrength) 

} 

3 - 任何其他的方式來做到這一點的是我沒有想到?

回答

4

add/RemoveActionListener方法添加到面板。使用這些代理給你單選按鈕並直接註冊ActionListener

或者,您可以提供一個返回單選按鈕狀態的isSelected方法。

+0

看起來像鍵盤的一些鍵不工作:P – SuperStar

+0

@SuperStar胖手指+ iPad + 11個月大+沒有睡眠=愚蠢的迴應:P – MadProgrammer

+0

@MadProgrammer - 請參閱我的代碼在這個鏈接 - http: //stackoverflow.com/questions/15753536/parent-jpanel-how-to-listen-to-the-events-generated-by-components-of-a-child-j –

5

選項3.不要都延長的JPanel,如果你可以通過使用 :-)

所有JSomething都內置它的設計將被原樣使用功能達到目標。 JPanel的內置功能是通用容器的功能。由於您所做的只是添加子項,因此不需要擴展 - 可以在配置代碼中配置帶偵聽器的子項。

如果確實擴展添加功能(對可能實現自定義背景畫一個JPanel),一般的規則是 - 一如既往的乖巧OO公民 - 以從未暴露,這不是供公衆使用的公共API :因此,變體1不是一種選擇。