JTable에 대해 사용자 정의 TableCellRenderer
(ValueRenderer)이 있고 셀은 Checkbox
입니다.itemStateChanged에 대해 TableCellRenderer의 행을 가져옵니다.
example에 언급 된대로 확인란의 상태 변경 (선택/선택 취소)을 수신하기 위해 ItemListener
을 valueRenderer에 연결했습니다.
내 문제는 itemStateChanged(ItemEvent e)
안에는 ItemEvent
소스가 ValueRenderer라는 것을 알고이 체크 박스가 포함 된 행을 얻는 방법을 모르겠다.
도와 주시겠습니까?
사용자 정의 TableCellRender : 여기
내 코드의 일부입니다public class ValueRenderer extends JCheckBox implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
this.setSelected((Boolean) value);
return this;
}
}
된 ItemListener : 당신이 알고 싶은 경우에
public class TableRowCheckBoxListener implements ItemListener {
private JTable hqlRequestTable;
public TableRowCheckBoxListener(JTable hqlRequestTable) {
this.hqlRequestTable = hqlRequestTable;
}
@Override
public void itemStateChanged(ItemEvent e) {
/*How do I get the row which contains the checkbox clicked knowing that :
e.getSource() == ValueRenderer
e.getItem() == ValueRender
*/
}
}
왜 필요합니까? 예제를 다시 읽으면 itemstate 리스닝이 렌더러가 아닌 편집기에서 이루어 지지만 행 열도 없으므로주의해야합니다. JTable은 편집을 중단 할 경우 필요한 행과 열 매핑을 처리합니다. – Peter
렌더러는 완전히 수동적 인 슬레이브이며 paint 메커니즘이 적절하다고 판단 할 때마다 paintComponent를 실제 컴포넌트로 스탬핑하는 것 외에는 아무것도하지 않습니다. 그들에게 어떤 청취자도 등록하지 마라. 그들의 통보는 결코 의미가 없다. – kleopatra
@kleopatra 그것은 Dr.이 아니고 나로 한 것이 아닙니다. [예] (https://sites.google.com/site/drjohnbmatthews/table). 그래서 그의 코드를 가져다가 내 필요에 맞춰 수정하려고 시도했습니다. –