JTable
에는 고유 한 셀 렌더러와 셀 편집기가 있습니다.DefaultCellEditor 파생 인스턴스가 작업을 수행 한 후 셀 렌더러 업데이트
말은, 표 2 열을 포함하고 행 X :
첫번째 열은 부울 값 자체 셀 렌더링 셀 편집기 (라디오 버튼)
번째 열은 문자열 값을 포함하고 그 자신 셀 렌더러 포함을 : 현재 행의 첫 번째 열이 true로 설정된 경우 굵게 표시됩니다 (라디오 버튼 확인 됨)
라디오 버튼이 true로 설정되면 모든 값이 편집기에서 올바르게 업데이트되지만 두 번째 행은 굵게 표시되지 않습니다. ...
다른 행의 라디오 버튼을 확인하여 변경 사항을 확인해야합니다.
어디에서 변경 사항을 적용 할 수 있습니까? 당신의 도움에 대한
건배 및 감사
RadiobuttonTableCellEditor.java는
public class RadiobuttonTableCellEditor extends DefaultCellEditor
implements ItemListener {
JRadioButton rb = new JRadioButton();
public RadiobuttonTableCellEditor(JCheckBox pCheckBox) {
super(pCheckBox);
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if (value == null)
return null;
rb.addItemListener(this);
rb.setSelected((Boolean)value);
return rb;
}
public void itemStateChanged(ItemEvent e) {
super.fireEditingStopped();
}
public Object getCellEditorValue() {
rb.removeItemListener(this);
return rb.isSelected();
}
}
도움을 주셔서 감사합니다. getTableCellEditorComponent를 호출 할 때 참조하는 JTable의 멤버 선언을 추가했습니다. 그런 다음, 잘 getCellEditorValue이라고합니다 I 상태 :. \t \t 경우 (! 테이블 = NULL) { \t \t \t ((AbstractTableModel가) table.getModel()) fireTableDataChanged(); \t \t} –
아마도 작동하지만 사용자의 접근 방식이 올바르지 않습니다. DATA 변경에 대한 응답으로 테이블 모델에서 fireXXX 메소드를 호출해야합니다.어떤 경우에도 렌더러 또는 편집기에서 수행해야합니다. 아이디어가 간단합니다. 에디터는 model.setValueAt 메소드를 사용하여 새로운 값을 모델에 저장합니다. 그런 다음 모델은 모든 이해 관계자에게 데이터가 변경되었음을 알립니다. 렌더러와 편집자가 자동으로 반응하도록 반응합니다. –