Java - 使 jCheckBox 不可选中,反之亦然,而不禁用它

标签 java swing jcheckbox

我正在为我的类(class)做一个项目,我有以下情况: 它是一个 JDialog,它在构造函数上接收一个对象来使用它。对象“Album”有两个属性,根据 MySQL boolean 值可以是 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 具有的 MouseListener,使其具有以下行为:

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

还可以考虑将 JCheckBox 的 focusable 属性设置为 false:

checkBox.setFocusable(false);

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

关于Java - 使 jCheckBox 不可选中,反之亦然,而不禁用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584898/

相关文章:

java - SWING - JTable 单元格中的多个 JCheckBox

Java 架构 - 关于 ActionListener 约定的问题

java - 无需 READ_PHONE_STATE 权限即可使用 TelephonyManager

java - 从 JCR 存储库访问资源数据

java - java中如何使用字符串作为引用?

Java Swing 自动从表单中收集数据

java - 有没有办法将对象添加到 JComboBox 并分配一个要显示的字符串?

java - Swing JCheckbox : Focus with customized icons

java - JComboBox 中的 JCheckBoxes

java - 错误:找不到或加载主类com.sun.tools.internal.xjc.Driver