Java 如何在JFrame中取消选择单选按钮
我想取消选择我的单选按钮,我在我的程序在JFrame,它存在一些方法来取消选择所有单选按钮通过一个按钮称为清洁?此按钮将清除收音机按钮和显示的文本 执行的行动准则将使所有人认为:Java 如何在JFrame中取消选择单选按钮,java,swing,jframe,Java,Swing,Jframe,我想取消选择我的单选按钮,我在我的程序在JFrame,它存在一些方法来取消选择所有单选按钮通过一个按钮称为清洁?此按钮将清除收音机按钮和显示的文本 执行的行动准则将使所有人认为: JButton btnClean = new JButton("Clean"); btnClean.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {
JButton btnClean = new JButton("Clean");
btnClean.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
btnClean.setBounds(208, 184, 126, 28);
contentPane.add(btnClean);
通常,JRadioButton被分组在ButtonGroup对象中,ButtonGroup对象是一个逻辑对象,一次只允许选择一个JRadioButton。您要做的是在此ButtonGroup对象上调用
clearSelection()
另一方面,您似乎在GUI中使用null
布局。虽然空布局和setBounds()
可能会像创建复杂GUI的最简单和最好的方式一样吸引新手,但您创建的GUI越多,在使用它们时遇到的困难就越严重。当GUI调整大小时,它们不会调整您的组件的大小,它们是一个需要增强或维护的皇家女巫,当它们放置在滚动窗格中时会完全失败,当在所有平台或屏幕分辨率与原始分辨率不同的情况下查看时,它们看起来非常糟糕
比如说
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
@SuppressWarnings("serial")
public class BunchOButtons extends JPanel {
private static final String[] RADIO_TEXTS = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
private ButtonGroup weekDayBtnGroup = new ButtonGroup();
public BunchOButtons() {
// JRadioButtons love being held in JPanels that use GridLayout
JPanel radioPanel = new JPanel(new GridLayout(1, 0));
radioPanel.setBorder(BorderFactory.createTitledBorder("Week Days"));
for (String radioText : RADIO_TEXTS) {
JRadioButton radioButton = new JRadioButton(radioText); // create radiobtn
radioButton.setActionCommand(radioText); // set its action command text
weekDayBtnGroup.add(radioButton); // add to ButtonGroup
radioPanel.add(radioButton); // add to a GridLayout-using JPanel
}
JPanel buttonPanel = new JPanel();
buttonPanel.add(new JButton(new AbstractAction("Show Selection") {
@Override
public void actionPerformed(ActionEvent evt) {
ButtonModel model = weekDayBtnGroup.getSelection();
if (model != null) {
// if something is selected
System.out.println(model.getActionCommand());
} else {
System.out.println("No weekday selected");
}
}
}));
buttonPanel.add(new JButton(new AbstractAction("Clear Selection") {
@Override
public void actionPerformed(ActionEvent e) {
weekDayBtnGroup.clearSelection();
}
}));
setLayout(new BorderLayout());
add(radioPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.PAGE_END);
}
private static void createAndShowGui() {
BunchOButtons mainPanel = new BunchOButtons();
JFrame frame = new JFrame("BunchOButtons");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
通常,JRadioButton被分组在ButtonGroup对象中,ButtonGroup对象是一个逻辑对象,一次只允许选择一个JRadioButton。您要做的是在此ButtonGroup对象上调用
clearSelection()
另一方面,您似乎在GUI中使用null
布局。虽然空布局和setBounds()
可能会像创建复杂GUI的最简单和最好的方式一样吸引新手,但您创建的GUI越多,在使用它们时遇到的困难就越严重。当GUI调整大小时,它们不会调整您的组件的大小,它们是一个需要增强或维护的皇家女巫,当它们放置在滚动窗格中时会完全失败,当在所有平台或屏幕分辨率与原始分辨率不同的情况下查看时,它们看起来非常糟糕
比如说
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
@SuppressWarnings("serial")
public class BunchOButtons extends JPanel {
private static final String[] RADIO_TEXTS = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
private ButtonGroup weekDayBtnGroup = new ButtonGroup();
public BunchOButtons() {
// JRadioButtons love being held in JPanels that use GridLayout
JPanel radioPanel = new JPanel(new GridLayout(1, 0));
radioPanel.setBorder(BorderFactory.createTitledBorder("Week Days"));
for (String radioText : RADIO_TEXTS) {
JRadioButton radioButton = new JRadioButton(radioText); // create radiobtn
radioButton.setActionCommand(radioText); // set its action command text
weekDayBtnGroup.add(radioButton); // add to ButtonGroup
radioPanel.add(radioButton); // add to a GridLayout-using JPanel
}
JPanel buttonPanel = new JPanel();
buttonPanel.add(new JButton(new AbstractAction("Show Selection") {
@Override
public void actionPerformed(ActionEvent evt) {
ButtonModel model = weekDayBtnGroup.getSelection();
if (model != null) {
// if something is selected
System.out.println(model.getActionCommand());
} else {
System.out.println("No weekday selected");
}
}
}));
buttonPanel.add(new JButton(new AbstractAction("Clear Selection") {
@Override
public void actionPerformed(ActionEvent e) {
weekDayBtnGroup.clearSelection();
}
}));
setLayout(new BorderLayout());
add(radioPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.PAGE_END);
}
private static void createAndShowGui() {
BunchOButtons mainPanel = new BunchOButtons();
JFrame frame = new JFrame("BunchOButtons");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
由于您的
JFrame
可能包含许多任意嵌套在框架布局中的JRadioButton
组件,因此您可能需要使用递归方式向下递归组件层次结构,并检查每个组件是否是JRadioButton
的实例,在这种情况下,您应该强制转换并。setSelected(false)
它,或容器
,在这种情况下,您应该继续递归。要获取JFrame
的顶级容器,请使用JFrame.getContentPane
用一个简单的例子(包含OP要求的Clean
方法的实现)来说明这种方法:
当然,正如其他人所建议的,您很可能希望将单选按钮选择状态的管理分配给
ButtonGroup
,并使用ButtonGroup.clearSelection
方法取消所有选择(上述方法不适用于ButtonGroup
中的单选按钮).由于您的JFrame
可能包含许多任意嵌套在框架布局中的JRadioButton
组件,因此您可能需要使用递归方式向下递归组件层次结构,并检查每个组件是否是JRadioButton
的实例,在这种情况下,您应该强制转换并。setSelected(false)
它,或容器
,在这种情况下,您应该继续递归。要获取JFrame
的顶级容器,请使用JFrame.getContentPane
用一个简单的例子(包含OP要求的Clean
方法的实现)来说明这种方法:
当然,正如其他人所建议的,您很可能希望将单选按钮选择状态的管理分配给
ButtonGroup
,并使用ButtonGroup.clearSelection
方法取消所有选择(上述方法不适用于ButtonGroup
中的单选按钮).我没有在Components中找到ButtonGroup对象,在哪里可以找到他?PS:我是JFrame新手,我正在学习编程课程,但我们在JOptionPane中只使用Java。@Novatec javax.swingx。ButtonGroup@Novatec:如Mad所述--在API中查找ButtonGroup。还有一个Google onJava按钮组教程
first hit:。再看看上面的代码示例,我没有在Components中找到ButtonGroup对象,在哪里可以找到他?PS:我是JFrame新手,我正在学习编程课程,但我们在JOptionPane中只使用Java。@Novatec javax.swingx。ButtonGroup@Novatec:如Mad所述--在API中查找ButtonGroup。还有一个Google onJava按钮组教程
first hit:。还要看上面的代码示例。BurptinGroup不是组件或容器,也不是添加到UI中的。相反,它管理着一组我不好的按钮。我的意思是检查每个组件是否是JRadioButton
,然后用.setSelected(false)
取消选择。但是,只有当JRadioButton
组件不在任何按钮组中时,这才有效。谢谢你的代码对我帮助很大,我只是需要它,不创建ButtonGroup.BurptinGroup不是组件或容器,也不会添加到UI中。相反,它管理着一组我不好的按钮。我的意思是检查每个组件是否是一个JRadioButton
,并用.setSelected(false)
取消选择它。然而,只有当JRadioButton
组件不在任何按钮组中时,这才有效。谢谢你的代码对我帮助很大,我只是需要它,而不是制作按钮组。