Java, как использовать переключатель, чтобы начать действие и иметь возможность щелкнуть другую кнопку

Я пытаюсь заставить работать 2 переключателя в одном классе, чтобы при их выборе можно было нажимать JButtons в другом классе.

Другими словами, если я не нажимаю переключатель, я не могу нажимать кнопки в другом классе и менять цвет кнопки в другом классе.

У меня нет кода, хотя я думал о добавлении нескольких слушателей действий в оба класса, я пробовал геттеры и сеттеры, но ничего не происходит, и я не могу заставить его работать.

Я попытался использовать строку из переключателя, например:

If(btn.equals("w")){

Some string = "w"

}else{

Some string = "b"

}

а затем установите строку и получите ее в другом классе, но не работает. Есть ли способ заставить его работать, когда вы нажимаете один из двух переключателей, а затем доступны другие кнопки JButton? Как бы Вы это сделали?


person Brain Bytes    schedule 06.05.2017    source источник


Ответы (1)


Этот код активирует все переключатели во второй группе, как только будет выбран любой из переключателей в первой группе.

public class RadioButtonDemo extends JFrame {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new RadioButtonDemo().setVisible(true);
            }
        });
    }

    public RadioButtonDemo() {
        super("Swing JRadioButton Demo");

        JRadioButton option1 = new JRadioButton("Linux 1");
        JRadioButton option2 = new JRadioButton("Windows 1");
        JRadioButton option3 = new JRadioButton("Macintosh 1");

        JRadioButton option4 = new JRadioButton("Linux 2");
        JRadioButton option5 = new JRadioButton("Windows 2");
        JRadioButton option6 = new JRadioButton("Macintosh 2");

        ButtonGroup group1 = new ButtonGroup();
        ButtonGroup group2 = new ButtonGroup();

        ActionListener listener = new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (((JRadioButton) e.getSource()).isSelected()) {
                    Enumeration<AbstractButton> elements = group2.getElements();
                    while (elements.hasMoreElements()) {
                        JRadioButton button = (JRadioButton) elements.nextElement();
                        button.setEnabled(true);
                    }
                }
            }
        };

        option1.addActionListener(listener);
        option2.addActionListener(listener);
        option3.addActionListener(listener);

        option4.setEnabled(false);
        option5.setEnabled(false);
        option6.setEnabled(false);

        group1.add(option1);
        group1.add(option2);
        group1.add(option3);

        group2.add(option4);
        group2.add(option5);
        group2.add(option6);

        setLayout(new FlowLayout());

        add(option1);
        add(option2);
        add(option3);

        add(option4);
        add(option5);
        add(option6);


        pack();
    }
}

В коде, где вы меняете цвет кнопок, вы можете сначала проверить, включен он или нет. Или, если это делается из элемента пользовательского интерфейса, вы также можете отключить это, в зависимости от ваших потребностей.

person Dalendrion    schedule 06.05.2017
comment
Это хорошо, но, наверное, вы догадались, что я нуб, JButton находится в другом классе, нужно ли мне использовать наследование ActionListen, чтобы заставить JButton в другом классе работать? - person Brain Bytes; 07.05.2017
comment
Разве вы не можете создать метод в этом классе, который можно было бы вызывать отсюда? Если нет, можете ли вы предоставить SSCCE? meta. stackexchange.com/questions/22754/ - person Dalendrion; 07.05.2017
comment
Нет, к сожалению, я не могу, хотя я думаю, что нашел решение, я опубликую его, если смогу - person Brain Bytes; 07.05.2017