當你的JFrame
可能包含許多JRadioButton
成分任意嵌套在框架的佈局,您可能需要使用Container.getComponents
遞歸下降組件層次結構,並檢查各組件是一個instanceof JRadioButton
,在哪種情況下你應該投下並且.setSelected(false)
它或者Container
,在這種情況下你應該繼續遞歸。要獲得JFrame
的頂級容器,請使用JFrame.getContentPane
。
爲了說明一個簡單的例子這種方法(包含由OP要求Clean
方法的實現):
public class FrameWithRadios extends JFrame {
public FrameWithRadios() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel panelCenter = new JPanel();
panelCenter.setLayout(new GridLayout(1, 2));
JRadioButton rb11 = new JRadioButton("Option 1.1");
JRadioButton rb12 = new JRadioButton("Option 1.2");
JRadioButton rb13 = new JRadioButton("Option 1.3");
JPanel panelLeft = new JPanel();
panelLeft.setLayout(new GridLayout(3, 1));
panelLeft.add(rb11);
panelLeft.add(rb12);
panelLeft.add(rb13);
panelCenter.add(panelLeft);
JRadioButton rb21 = new JRadioButton("Option 2.1");
JRadioButton rb22 = new JRadioButton("Option 2.2");
JRadioButton rb23 = new JRadioButton("Option 2.3");
JPanel panelRight = new JPanel();
panelRight.setLayout(new GridLayout(3, 1));
panelRight.add(rb21);
panelRight.add(rb22);
panelRight.add(rb23);
panelCenter.add(panelRight);
JButton bClean = new JButton("Clean");
bClean.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
clean(getContentPane());
}
});
JPanel panelBottom = new JPanel();
panelBottom.add(bClean);
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
cp.add(panelCenter, BorderLayout.CENTER);
cp.add(panelBottom, BorderLayout.SOUTH);
}
protected void clean(Component comp) {
if (comp instanceof JRadioButton) {
((JRadioButton) comp).setSelected(false);
}
else if (comp instanceof Container) {
for (Component child: ((Container) comp).getComponents()) {
clean(child);
};
}
}
public static void main(String[] args) {
FrameWithRadios frame = new FrameWithRadios();
frame.setSize(320, 200);
frame.setVisible(true);
}
}
當然,正如其他人的建議,你很可能會想到將單選按鈕的選擇狀態管理分配到ButtonGroup
,並使用ButtonGroup.clearSelection
方法取消選擇所有內容(上述內容對於ButtonGroup
中的單選按鈕不起作用)。
我沒有在Components中找到ButtonGroup對象,他可以找到他? PS:我是JFrame的新手,我正在編程,但我們在JOptionPane中只使用Java。 –
@Novatec javax.swingx.ButtonGroup – MadProgrammer
@Novatec:作爲瘋狂的國家 - 查看ButtonGroup的API。還有一個關於'Java ButtonGroup Tutorial'的Google首先命中:[The ButtonGroup Tutorial](https://docs.oracle.com/javase/tutorial/uiswing/components/buttongroup.html)。也看看上面的代碼示例。 –