JTable용 setCellEditor 새로 고침
문제
나는 '에 대한 답을 찾고 있었다. 이전 질문 그리고 한계를 극복하기 위한 기발한 아이디어를 가지고 있었습니다. JTable
.행 단위로 편집기가 달라야 하지만 JTable
각 열에 대해 단일 편집기만 처리할 수 있습니다.
그래서 내 생각은 MouseListener
행과 열을 확인하려면 JTable
매번 새로운 편집기를 설정하십시오.
그런데 전화를 해보니 setCellEditor()
두 번째는 아무런 효과가 없습니다.편집기는 설정된 첫 번째 편집기로 유지됩니다.그렇다면 동일한 열에 대해 "setCellEditor"가 두 번째로 작동하도록 하려면 어떻게 해야 합니까?
여기에 코드가 있습니다. MouseListener
.
public void mouseClicked(MouseEvent e) {
int cols = resultTable.columnAtPoint(new Point(e.getX(), e.getY()));
int rows = resultTable.rowAtPoint(new Point(e.getX(), e.getY()));
StorageObject item = (StorageObject) resultTable.getModel().getValueAt(rows, cols);
TableColumn col = resultTable.getColumnModel().getColumn(cols);
col.setCellEditor(new MyComboBoxEditor(item.list));
}
해결책
귀하의 코드가 왜 작동하지 않는지 잘 모르겠지만(Swing을 한 지 꽤 오래되었음) 그냥 재정의하는 것이 어때요?
public TableCellEditor getCellEditor(int row, int column)
JTable에 있나요?각 행에 사용하려는 콤보 상자의 맵을 유지하고 재정의된 메서드에서 올바른 항목을 반환합니다.
다른 팁
내 이론은 Table/TableCell에 등록된 모든 마우스 리스너가 호출될 때 기본적으로 API 클래스에 설치된 마우스 리스너가 마우스 리스너보다 먼저 호출된다는 것입니다.이는 편집기를 가져오는 이벤트가 다른 편집기로 설정되기 전에 발생한다는 의미입니다.경쟁 조건과 비슷하지만 실제로는 API 소스 코드 어딘가에 정의되어 있습니다.그것은 내 순진한 이론이고 이미 거기에 몇 가지 구멍이 있음을 볼 수 있으므로 내 솔루션은 다음과 같습니다.
우세하다 JTable.getCellEditor(int 행, int 열).이를 통해 모든 셀에 대해 원하는 편집기를 반환할 수 있습니다.