Как включить отключенный JRadioButton

У меня есть два JRadioButton с ImageIcon для каждого. Из-за того, что я использую ImageIcons, мне нужно создать впечатление, что одна кнопка выбрана, а другая не выбрана. Для этого я пытаюсь отключить другую кнопку, которая автоматически меняет внешний вид ImageIcon на отключенный.

Проблема в том, что когда я нажимаю на отключенный JRadioButton, ничего не происходит, даже не вызывается ActionListener на JRadioButton.

Есть ли способ включить отключенный JRadioButton, щелкнув его напрямую? После его отключения ActionListener больше не вызывается, поэтому я не могу включить его, щелкнув по нему.

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

//Below part of my code how I initialize the buttons
ButtonGroup codeSearchGroup = new ButtonGroup();

searchAllDocs = new JRadioButton(new ImageIcon(img1));
searchCurrDoc = new JRadioButton(new ImageIcon(img2));

RadioListener myListener = new RadioListener();
searchAllDocs.addActionListener(myListener);
searchCurrDoc.addActionListener(myListener);

codeSearchGroup.add(searchAllDocs);
codeSearchGroup.add(searchCurrDoc);


//Below listener class for buttons
class RadioListener implements ActionListener {  
    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == searchAllDocs){
            searchAllDocs.setEnabled(true);
            System.out.println("Search All documents pressed. Disabling current button...");
            searchCurrDoc.setEnabled(false);

        } 
        else{
            searchCurrDoc.setEnabled(true);
            System.out.println("Search Current document pressed. Disabling all button...");
            searchAllDocs.setEnabled(false);
        }
    }


}

Заранее спасибо.


person Marquinio    schedule 03.01.2013    source источник


Ответы (1)


ActionListener не будет срабатывать в отключенном режиме, но будут срабатывать события мыши.

Таким образом, просто добавьте MouseAdapter к JRadioButton и переопределите mouseClicked(..) и вызовите setEnable(true) внутри переопределенного метода, например так:

    JRadioButton jrb = new JRadioButton("hello");
    jrb.setEnabled(false);

    jrb.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent me) {
            super.mouseClicked(me);
            JRadioButton jrb = (JRadioButton) me.getSource();
            if (!jrb.isEnabled()) {//the JRadioButton is disabled so we should enable it
                //System.out.println("here");
                jrb.setEnabled(true);
            }
        }
    });

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

person David Kroukamp    schedule 03.01.2013