2014-05-10 18 views
2

我正在爲我的課做一個項目,我有以下情況: 這是一個JDialog,接收構造函數上的對象以使用它。根據MySQL布爾值,對象'相冊'有兩個屬性可以是0或1。 當窗口初始化時,它會檢查這兩個屬性的狀態。如果其中一個設置爲1,則檢查相應的jCheckBox。否則(情況0)它保持未選中,並且與第二個屬性相同。Java - 使jCheckBox不可禁用或反之亦然,而不禁用它

我想是什麼力量讓兩個jCheckBoxes不可編輯,而無需禁用它們,也就是說,它仍然期待爲「已啓用」,但如果你點擊它會不會發生什麼,因爲我不想讓他們看看灰色爲禁用。

我嘗試了一些東西,例如創建一個保持檢查複選框狀態的線程,如果它不是相冊屬性中的集合,它將其更改爲正確的狀態,但它不起作用,您可以檢查或根據需要取消選中兩個複選框。

我該怎麼辦?

這是我現在所擁有的。

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

是否必須是複選框?因爲它們不可編輯,所以標籤怎麼樣? – kuporific

+0

這不是必須的,但會是酷的方式,因爲GUI看起來像這樣:http://prntscr.com/3hztky –

回答

3

你可以刪除的MouseListener是JCheckBox的有,給它這種行爲:

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

還要考慮對JCheckBox可獲得焦點的屬性設置爲false:

checkBox.setFocusable(false); 

這可以防止用戶切換到複選框,然後使用空格鍵切換其狀態。

+0

謝謝,從CheckBox中刪除MouseListener已經工作了,因爲將setFocusable()設置爲false沒有。 :) –

+0

@ user3623998:你不明白,如果你想真正禁用用戶交互的複選框,同時仍然允許通過程序檢查/取消選中,我建議你同時使用這兩個選項。如果將它保留爲可聚焦狀態,並且用戶選中它,則可以檢查它並通過按空格鍵取消選中它。 –

+0

的確,我試過了。我現在使用這兩種方法。再次感謝你! –

相關問題