Проблемы с CheckBox - PullRequest
       1

Проблемы с CheckBox

0 голосов
/ 12 мая 2018

Я сейчас изучаю графический интерфейс самостоятельно, у меня проблемы с JCheckBox.Как я могу сделать только один ответ?В настоящее время я могу отметить два ответа.Идеально, что пользователь может выбрать только один выбор за раз, а если он выберет другой, он удалит выбор первого.кто-нибудь может помочь?спасибо!

import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class CheckBoxTry 
{
    JCheckBox show1,show2;
    JLabel label1, label2;
    private JFrame jf; 
    public CheckBoxTry(){
        jf= new JFrame();
        jf.setSize(300,300);
        jf.setVisible(true);
        jf.setLayout(new GridLayout(2,2));
        label1= new JLabel("");
        jf.add(label1);
        label2= new JLabel("");
        jf.add(label2);
        show1=new JCheckBox("show1");
        show2=new JCheckBox("show2");
        jf.add(show1);
        jf.add(show2);
        event e= new event();
        show1.addItemListener(e);
        show2.addItemListener(e);
    }
    public class event implements ItemListener{
        public void itemStateChanged (ItemEvent e){
            if (show1.isSelected())
            {
                label1.setText("1 selected");
            }else{
                label1.setText("");
            }

            if (show2.isSelected())
            {
                label2.setText("2 selected");
            }else{
                label2.setText("");
            }
        }
    }
    public static void main(String[] args)
    {
        CheckBoxTry as= new CheckBoxTry();
    }
}

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Идеально, что пользователь может выбрать только один выбор за раз

Вы должны быть JRadioButton для этого вместо JCheckBox.

Затем вы добавляете каждый JRadioButton к ButtonGroup, и ButtonGroup гарантирует, что когда-либо будет выбрана только одна кнопка.

Прочтите раздел из учебника по Swing на Как использовать радиокнопки для получения дополнительной информации и рабочих примеров.

0 голосов
/ 12 мая 2018

Вы можете сделать это, используя метод setSelected (boolean b) для ваших флажков.Однако, чтобы заставить их работать вместе, вы должны отчасти отделить их слушателей.

@Override
    public void itemStateChanged(ItemEvent e) {
        if (e.getSource() == show1) {
            if (show1.isSelected()) {
                label1.setText("1 selected");
                show2.setSelected(false); //remove selection from show2 and call again this item listener
            } else {
                label1.setText("");
            }
        } else if (e.getSource() == show2) {
            if (show2.isSelected()) {
                label2.setText("2 selected");
                show1.setSelected(false);//remove selection from show1 and call again this item listener
            } else {
                label2.setText("");
            }
        }
    }

Также дружеское напоминание:

SwingUtilities.invokeLater(() -> {
            CheckBoxTry as = new CheckBoxTry(); // All swing apps must run on their own thread.
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...