2014-05-10 5 views
2

클래스에 대한 프로젝트를 수행하고 있는데 다음과 같은 상황이 있습니다. 생성자에서 작업 할 객체를받는 JDialog입니다. Object 'Album'은 MySQL 부울에 따라 0 또는 1 일 수있는 두 가지 속성을 가지고 있습니다. 창이 초기화되면 두 속성의 상태를 확인합니다. 그 중 하나가 1로 설정되면 해당 jCheckBox가 확인됩니다. 그렇지 않은 경우 (대소 문자 0)에는 선택되지 않은 상태로 유지되고 두 번째 속성에는 동일하게 유지됩니다.자바 - 비활성화하지 않고도 jCheckBox를 선택 취소 할 수 없게 만듭니다.

내가 원하는 것은 두 개의 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); 
     } 
    } 
+0

체크 박스 여야합니까? 레이블은 편집 할 수 없으므로 어떻게됩니까? – kuporific

+0

그럴 필요는 없지만 GUI가 다음과 같이 보이므로 멋진 방법이 될 것입니다 : http://prntscr.com/3hztky –

답변

3

당신은 JCheckBox에 그가이 동작을 제공했다는의 MouseListener를 제거 할 수 있습니다 :

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

는 또한 false로 JCheckBox에의 포커스 속성을 설정하는 것이 좋습니다 : 이것은에서 사용자를 방지

checkBox.setFocusable(false); 

을 확인란으로 이동 한 다음 스페이스 바를 사용하여 상태를 전환합니다.

+0

CheckBox에서 MouseListener를 제거해 주셔서 감사합니다. setFocusable()을 false로 설정하십시오 그랬어. :) –

+0

@ user3623998 : 사용자 상호 작용에서 확인란을 사용하지 않도록 설정하면서 동시에 프로그램을 통해 선택/선택 취소 할 수 있도록하려면이 두 가지 방법을 모두 사용하는 것이 좋습니다. 집중할 수있는 상태로두고 사용자가 탭을 탭하면 스페이스 바를 눌러 체크하고 선택을 취소 할 수 있습니다. –

+0

사실, 해봤 어. 나는 두 가지 방법을 모두 사용한다. 다시 감사합니다! –