2010-02-01 5 views
0

Java Swing에서 DefaultTableModel을 확장하는 테이블 모델 클래스를 사용하는 JTable을 만들었습니다. 테이블의 한 행의 값이 부울 유형이므로이 값은 확인란으로 표시됩니다. 이 체크 박스 항목 리스너 클래스에 추가하려면 각 체크 상자를 초기화해야합니다. 그러나 이들이 테이블 모델에 의해 자동으로 생성되면 어떻게해야합니까?테이블 모델에 의해 생성 된 JCheckBoxes 초기화

답변

2

이러한 CheckBox는 기본 데이터를 변경하므로 TableModelListener을 추가하고 해당 열의 tableChanged 이벤트에 반응하면 충분합니다.

jTable1.getModel().addTableModelListener(new TableModelListener() { 
    final int YOUR_BOOLEAN_COLUMN = 1; 
    public void tableChanged(TableModelEvent e) { 
     if(e.getColumn() == YOUR_BOOLEAN_COLUMN) { 
      // get value from model (not affected if user re-orders columns) 
      TableModel tableModel = jTable1.getModel(); 
      Boolean value = 
       (Boolean)tableModel.getValueAt(e.getFirstRow(), YOUR_BOOLEAN_COLUMN); 
      System.out.println(value); 
     } 
    } 
}); 
1

짧은 대답은 당신이 두 가지 이유로 표에 JCheckboxes에 ActionListener를 추가 할 수 없습니다입니다 : 기본 설정으로

  1. , 하나의 JCheckBox에이 모든 체크 박스 세포를 렌더링하는 데 사용되는 .
  2. JCheckBox가 포함 된 표 셀의 마우스 클릭은 확인란에 전달되지 않고 테이블에 의해 흡수됩니다.

에게 이러한 이벤트가 필요한지 묻는 것이 중요하다고 생각합니다. 당신이주는 대답은 가장 좋은 접근 방식을 반영합니다.

사용자가 확인란의 상태를 편집 할 수있게하려는 경우 가장 좋은 방법은 TableModel.isCellEditable(int, int)을 재정 의하여 확인란 열에 대해 true를 반환하고 TableModel이 업데이트 될 때 원본 데이터를 간단히 업데이트하는 것입니다.

관련 문제