将 jradiobutton 中的选定项设置为多个
Set selected item in jradiobutton to multiple
我有一个JRadioButton
,我必须将所选项目设置为12,然后如果它已经达到12,它将disable/grey排除其他选择。
我所知道的是,如果您将 JRadioButton
添加到 ButtonGroup
,这会将所选项目设置为 1,但不是我想要的多个。
这可能吗? methods/way 有什么方法吗?感谢您的任何建议:)
创建 JRadioButton 的数组列表。每次用户单击 JRadioButton(已启用)时,浏览列表并计算已启用的 JRadioButton 数量。如果计数大于或等于 12,则禁用所有其他单选按钮,直到用户 select 成为一个。
这只是解决此问题的众多方法之一,
希望对您有所帮助。
//initiate jradiobutton arraylist (this will be a field at top of class)
buttons = new ArrayList<JRadioButtons>();
//Create buttons with a listener attached
JRadioButton b1 = new JRadioButton("RadioButton One");
b1.setActionListener(myActionListener);
b1.setActionCommand("select");
buttons.add(b1);
//Add rest of buttons in the same way
JRadioButton b2...
//Add the radio buttons to your panel and such
现在,当用户点击您的某个按钮时,您的动作侦听器将被触发,您可以在此处检查启用的数量
public void actionPerformed(ActionEvent e){
//Check if action was a jradiobutton
if(e.getActionCommand().equals("select")){
int count = 0;
//Here check the amount of buttons selected
for(JRadioButton button: buttons){
if(button.isSelected()) count++;
}
//Now check if count is over 12
if(count > 12){
for(JRadioButton button: buttons){
//if the button trying to activate when 12 already have been, disable it
if(button.equals(e.getSource()) button.setSelcted(false);
}
}
}
}
这应该在已经 selected 时禁用按钮,并且也只允许用户 select arraylist 中的 12 个按钮。
JRadioButton
是错误的类型,因为用户只希望 select 一个。
您最好将 JCheckBox
与自定义 ActionListener
一起使用,例如 SSCCE:
public class CheckBoxActivationTest {
public static void main(String[] args) {
final int MAX_ACTIVE_CHECK_BOXES = 12;
List<JCheckBox> allCheckBoxes = new ArrayList<>();
ActionListener actionListener = new ActionListener() {
private int activeCheckBoxesCounter = 0;
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("action!");
JCheckBox currentCheckBox = (JCheckBox) e.getSource();
activeCheckBoxesCounter += currentCheckBox.isSelected() ? 1 : -1;
for (JCheckBox jCheckBox : allCheckBoxes) {
jCheckBox.setEnabled(jCheckBox.isSelected()
|| MAX_ACTIVE_CHECK_BOXES > activeCheckBoxesCounter);
}
}
};
JPanel jPanel = new JPanel(new GridLayout(6, 0));
for (int i = 0; i < 30; i++) {
JCheckBox checkBox = new JCheckBox("Option "+(1+ i));
allCheckBoxes.add(checkBox);
checkBox.addActionListener(actionListener);
jPanel.add(checkBox);
}
JOptionPane.showMessageDialog(null, jPanel);
}
}
我有一个JRadioButton
,我必须将所选项目设置为12,然后如果它已经达到12,它将disable/grey排除其他选择。
我所知道的是,如果您将 JRadioButton
添加到 ButtonGroup
,这会将所选项目设置为 1,但不是我想要的多个。
这可能吗? methods/way 有什么方法吗?感谢您的任何建议:)
创建 JRadioButton 的数组列表。每次用户单击 JRadioButton(已启用)时,浏览列表并计算已启用的 JRadioButton 数量。如果计数大于或等于 12,则禁用所有其他单选按钮,直到用户 select 成为一个。
这只是解决此问题的众多方法之一,
希望对您有所帮助。
//initiate jradiobutton arraylist (this will be a field at top of class)
buttons = new ArrayList<JRadioButtons>();
//Create buttons with a listener attached
JRadioButton b1 = new JRadioButton("RadioButton One");
b1.setActionListener(myActionListener);
b1.setActionCommand("select");
buttons.add(b1);
//Add rest of buttons in the same way
JRadioButton b2...
//Add the radio buttons to your panel and such
现在,当用户点击您的某个按钮时,您的动作侦听器将被触发,您可以在此处检查启用的数量
public void actionPerformed(ActionEvent e){
//Check if action was a jradiobutton
if(e.getActionCommand().equals("select")){
int count = 0;
//Here check the amount of buttons selected
for(JRadioButton button: buttons){
if(button.isSelected()) count++;
}
//Now check if count is over 12
if(count > 12){
for(JRadioButton button: buttons){
//if the button trying to activate when 12 already have been, disable it
if(button.equals(e.getSource()) button.setSelcted(false);
}
}
}
}
这应该在已经 selected 时禁用按钮,并且也只允许用户 select arraylist 中的 12 个按钮。
JRadioButton
是错误的类型,因为用户只希望 select 一个。
您最好将 JCheckBox
与自定义 ActionListener
一起使用,例如 SSCCE:
public class CheckBoxActivationTest {
public static void main(String[] args) {
final int MAX_ACTIVE_CHECK_BOXES = 12;
List<JCheckBox> allCheckBoxes = new ArrayList<>();
ActionListener actionListener = new ActionListener() {
private int activeCheckBoxesCounter = 0;
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("action!");
JCheckBox currentCheckBox = (JCheckBox) e.getSource();
activeCheckBoxesCounter += currentCheckBox.isSelected() ? 1 : -1;
for (JCheckBox jCheckBox : allCheckBoxes) {
jCheckBox.setEnabled(jCheckBox.isSelected()
|| MAX_ACTIVE_CHECK_BOXES > activeCheckBoxesCounter);
}
}
};
JPanel jPanel = new JPanel(new GridLayout(6, 0));
for (int i = 0; i < 30; i++) {
JCheckBox checkBox = new JCheckBox("Option "+(1+ i));
allCheckBoxes.add(checkBox);
checkBox.addActionListener(actionListener);
jPanel.add(checkBox);
}
JOptionPane.showMessageDialog(null, jPanel);
}
}