Java Swing - проблема в отключении JCheckbox - PullRequest
0 голосов
/ 27 апреля 2010

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

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

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

Ответы [ 3 ]

1 голос
/ 27 апреля 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");       
    } 
}
1 голос
/ 28 апреля 2010

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

* * 1003 Обновление: Для полной ясности есть только два способа изменить выбранное состояние флажка.
  1. Звонок на setSelected
  2. Пользователь нажимает на флажок

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

1 голос
/ 27 апреля 2010

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

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

...