문제

나는 '에 대한 답을 찾고 있었다. 이전 질문 그리고 한계를 극복하기 위한 기발한 아이디어를 가지고 있었습니다. 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 열).이를 통해 모든 셀에 대해 원하는 편집기를 반환할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top