Java—使jCheckBox不可选中,反之亦然,但不禁用它

Java—使jCheckBox不可选中,反之亦然,但不禁用它,java,swing,jcheckbox,Java,Swing,Jcheckbox,我正在为我的班级做一个项目,我有以下情况: 它是一个JDialog,在构造函数上接收一个对象来使用它。根据MySQL布尔值,对象“Album”有两个属性,可以是0或1。 初始化窗口时,它会检查这两个属性的状态。如果其中一个设置为1,则会检查相应的jCheckBox。否则(案例0)将保持未选中状态,第二个属性也是如此 我想要的是在不禁用它们的情况下使两个jcheckbox不可编辑,也就是说,它看起来仍然是“已启用”的,但是如果单击它,它不会发生任何事情,因为我不希望它们看起来像已禁用的灰色 我尝试

我正在为我的班级做一个项目,我有以下情况: 它是一个JDialog,在构造函数上接收一个对象来使用它。根据MySQL布尔值,对象“Album”有两个属性,可以是0或1。 初始化窗口时,它会检查这两个属性的状态。如果其中一个设置为1,则会检查相应的jCheckBox。否则(案例0)将保持未选中状态,第二个属性也是如此

我想要的是在不禁用它们的情况下使两个jcheckbox不可编辑,也就是说,它看起来仍然是“已启用”的,但是如果单击它,它不会发生任何事情,因为我不希望它们看起来像已禁用的灰色

我尝试了一些事情,比如创建一个线程,不断检查复选框状态,如果它不是相册属性上的设置,它会将其更改为正确的状态,但不起作用,您可以根据需要选中或取消选中这两个复选框

我能做什么

这是我现在所拥有的

public class JDVerAlbum extends javax.swing.JDialog {

    /**
     * Creates new form JDVerAlbum
     */
    Album a;
    /**
     * 
     * @deprecated 
     */
    public JDVerAlbum(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }

    public JDVerAlbum(java.awt.Frame parent, boolean modal, Album a) {
        super(parent, modal);
        this.a=a;
        initComponents();
        inicializar();
    }

    private void inicializar(){
        Statement stm = Controlador.connect();
        String s = null;
        try {
            ResultSet rs = stm.executeQuery("SELECT grupo.nombre from album, grupo where album.nombre='"+a.getName()+"' and album.idgrupo=grupo.id;");
            rs.next();
            s = rs.getString(1);
        } catch (SQLException ex) {
            Logger.getLogger(JDVerAlbum.class.getName()).log(Level.SEVERE, null, ex);
        }

        jLabelAlbum.setText(a.getName()+" - "+s);
        this.setTitle("Quaver Records - Ver álbum - "+jLabelAlbum.getText());
        jTextFieldAño.setText(""+a.getReleaseYear());
        jTextFieldTipo.setText(""+a.getType());
        if(a.getPhysicalSales()==1){
            jCheckBoxFisica.setSelected(true);
        }
        if(a.getDigitalSales()==1){
            jCheckBoxDigital.setSelected(true);
        }
    }

您可以删除JCheckBox具有的鼠标侦听器,该鼠标侦听器具有以下行为:

 JCheckBox checkBox = new JCheckBox("Check Box");
 EventListener[] listeners = checkBox.getListeners(MouseListener.class);
 for (EventListener eventListener : listeners) {
     checkBox.removeMouseListener((MouseListener) eventListener);
 }

还考虑将JCuffox的可聚焦属性设置为false:

checkBox.setFocusable(false);

这可以防止用户切换到复选框,然后用空格键切换其状态。

它必须是复选框吗?既然标签是不可编辑的,那么标签又如何呢?不需要这样做,但这是一种很酷的方式,因为GUI看起来是这样的:谢谢,从复选框中删除MouseListener是有效的,因为将setFocusable()设置为false不是吗@user3623998:您不明白,如果您想真正禁用用户交互中的复选框,同时仍然允许通过程序对其进行检查/取消检查,我建议您同时使用这两种方法。如果你把它设为可聚焦状态,用户可以通过按空格键来选中或取消选中。没错,我试过了。我现在使用这两种方法。再次感谢你!