Java Swing-禁用JCheckbox时出现问题

Java Swing-禁用JCheckbox时出现问题,java,swing,checkbox,jcheckbox,Java,Swing,Checkbox,Jcheckbox,我正在禁用一个JCheckbox,然后在setEnabled(…)方法的帮助下启用它 但问题是,如果我禁用未选中的复选框,那么在启用它后它将变为选中 我希望它们在启用后的状态与禁用前相同。是否使用ActionListener启用/禁用JCheckBox?如果是这样,那么这是正常的,因为当您单击复选框时,isSelected()状态会更改 您可以使用isSelected()和setSelected()方法添加检查 您是否使用ActionListener启用/禁用JCheckBox?如果是这样,那么

我正在禁用一个
JCheckbox
,然后在
setEnabled(…)
方法的帮助下启用它

但问题是,如果我禁用未选中的复选框,那么在启用它后它将变为选中


我希望它们在启用后的状态与禁用前相同。

是否使用ActionListener启用/禁用JCheckBox?如果是这样,那么这是正常的,因为当您单击复选框时,isSelected()状态会更改


您可以使用isSelected()和setSelected()方法添加检查

您是否使用ActionListener启用/禁用JCheckBox?如果是这样,那么这是正常的,因为当您单击复选框时,isSelected()状态会更改


您可以使用isSelected()和setSelected()方法添加检查

以下代码按照您的描述工作:

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");       
    } 
}

下面的代码按照您的描述工作:

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");       
    } 
}

如果调用
setEnabled
,则不应影响所选状态。如果是,那么我建议您重新检查代码,看看是否有任何东西可以解释这种行为。正如其他人所建议的,如果您发布一个代码示例可能会有所帮助

更新: 为了清楚起见,只有两种方法可以更改复选框的选定状态

  • 调用
    setSelected
  • 用户单击复选框
  • 调用
    setEnabled
    不会更改所选状态。
    因此,您的代码中一定有一些奇怪的东西导致了这种情况。

    如果调用
    setEnabled
    ,则不应影响所选状态。如果是,那么我建议您重新检查代码,看看是否有任何东西可以解释这种行为。正如其他人所建议的,如果您发布一个代码示例可能会有所帮助

    更新: 为了清楚起见,只有两种方法可以更改复选框的选定状态

  • 调用
    setSelected
  • 用户单击复选框
  • 调用
    setEnabled
    不会更改所选状态。
    因此,您的代码中一定有奇怪的地方导致了这种情况。

    我没有得到您的答案。无论如何,我正在通过启动按钮的
    xxxxActionPerformed()
    方法禁用/启用复选框。styx777试图说您应该在调用
    setEnabled()
    后调用
    setSelected()
    方法。所以你可以选择你想要的组件。我没有得到你的答案。无论如何,我正在通过启动按钮的
    xxxxActionPerformed()
    方法禁用/启用复选框。styx777试图说您应该在调用
    setEnabled()
    后调用
    setSelected()
    方法。所以你可以选择你想要的组件。你可以发布一些代码来演示这个问题吗?双向bean数据绑定可以在这里找到你。我也有同样的问题,只是我的bean绑定有问题。你能发布一些代码来演示这个问题吗?双向bean数据绑定可以在这里找到答案。我也有同样的问题,只是我的bean绑定有问题。