我正在为我的课做一个项目,我有以下情况: 这是一个JDialog,它在构造函数上接收一个Object来处理它。根据MySQL布尔值,Object'Album'有两个属性,可以是0或1。 窗口初始化后,它会检查这两个属性的状态。如果其中一个设置为1,则会检查相应的jCheckBox。否则(情况0)它保持未选中状态,与第二个属性相同。
我想要的是让两个jCheckBox无法使用它们,也就是说,它仍然看起来像'启用'但是如果点击它就不会发生任何事情,因为我不希望它们看起来像灰色作为残疾人。
我尝试过一些东西,例如创建一个不断检查复选框状态的线程,如果它不是Album属性上的设置,它会将其更改为正确的状态,但它不起作用,您可以选中或取消选中根据需要选中两个复选框。
我该怎么办?
这是我现在所拥有的。
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);
}
}
答案 0 :(得分:3)
您可以删除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);
这可以防止用户选中复选框,然后使用空格键切换其状态。