Java Swing에서 DefaultTableModel
을 확장하는 테이블 모델 클래스를 사용하는 JTable
을 만들었습니다. 테이블의 한 행의 값이 부울 유형이므로이 값은 확인란으로 표시됩니다. 이 체크 박스 항목 리스너 클래스에 추가하려면 각 체크 상자를 초기화해야합니다. 그러나 이들이 테이블 모델에 의해 자동으로 생성되면 어떻게해야합니까?테이블 모델에 의해 생성 된 JCheckBoxes 초기화
0
A
답변
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를 추가 할 수 없습니다입니다 : 기본 설정으로
- , 하나의 JCheckBox에이 모든 체크 박스 세포를 렌더링하는 데 사용되는 .
- JCheckBox가 포함 된 표 셀의 마우스 클릭은 확인란에 전달되지 않고 테이블에 의해 흡수됩니다.
왜에게 이러한 이벤트가 필요한지 묻는 것이 중요하다고 생각합니다. 당신이주는 대답은 가장 좋은 접근 방식을 반영합니다.
사용자가 확인란의 상태를 편집 할 수있게하려는 경우 가장 좋은 방법은 TableModel.isCellEditable(int, int)
을 재정 의하여 확인란 열에 대해 true를 반환하고 TableModel이 업데이트 될 때 원본 데이터를 간단히 업데이트하는 것입니다.