Java Swing - проблема с отключением JCheckbox

Я отключаю JCheckbox, а затем включаю его с помощью метода setEnabled(...).

Но проблема в том, что если я отключу невыбранный флажок, он станет выбранным после того, как я его включу.

Я хочу, чтобы после включения все они имели то же состояние, что и до отключения.


person Yatendra    schedule 27.04.2010    source источник
comment
Можете ли вы опубликовать код, демонстрирующий эту проблему?   -  person lins314159    schedule 27.04.2010
comment
Двунаправленная привязка данных bean-компонента может застать вас врасплох. У меня была такая же проблема, и это было только с моими привязками бобов.   -  person clinux    schedule 23.06.2016


Ответы (3)


Вы включаете/отключаете JCheckBox с помощью ActionListener? Если это так, то это нормально, потому что когда вы нажимаете на флажок, статус isSelected() меняется.

Что вы можете сделать, так это добавить проверки, используя методы isSelected() и setSelected().

person Coding District    schedule 27.04.2010
comment
Я не получил вашего ответа. Во всяком случае, я отключаю/включаю флажок с помощью метода xxxxActionPerformed() кнопки «Пуск». - person Yatendra; 27.04.2010
comment
styx777 пытается сказать, что вы должны вызывать метод setSelected() после вызова setEnabled(). Таким образом, вы можете выбрать нужный компонент. - person Ham Vocke; 27.04.2010

Приведенный ниже код работает так, как вы описываете:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CheckboxTest implements ActionListener{
    private JCheckBox checkbox = new JCheckBox();
    private JButton btn = new JButton("Enable");
    public CheckboxTest(){
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        frame.getContentPane().add(panel);      
        checkbox.setEnabled(false);
        btn.addActionListener(this);
        panel.add(checkbox);
        panel.add(btn);
        frame.setSize(400, 400);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
    }

    public static void main(String[] args){
        new CheckboxTest();
    }

    public void actionPerformed(ActionEvent e) {
        checkbox.setEnabled(!checkbox.isEnabled());
        btn.setText(checkbox.isEnabled()?"Disable":"Enable");       
    } 
}
person Suresh Kumar    schedule 27.04.2010

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

Обновление: чтобы было совершенно ясно, есть только два способа изменить выбранное состояние флажка.

  1. Звонок setSelected
  2. Пользователь нажимает на флажок

Вызов setEnabled не изменяет выбранное состояние. Таким образом, в вашем коде должно быть что-то странное, что вызывает это.

person Avrom    schedule 27.04.2010