jtable 셀 편집 가능 - 그러나 두 번 클릭으로 * 아님 *
-
13-09-2019 - |
문제
열을 a에 추가하려고합니다 JTable
다음 동작 (Windows 탐색기 및 유사한 쉘과 유사) :
- 평소와 같이 셀을 클릭하여 선택할 수 있습니다.
- 셀을 두 번 클릭하여 별도의 동작을 수행 할 수 있습니다 (외부 프로그램 시작).
- 셀 값 (문자열)은 두 번째로 한 번 (일시 중지 후)를 클릭하거나 누르면 여전히 편집 할 수 있습니다. F2 셀이 강조되면.
두 번 클릭해야합니다 ~ 아니다 셀의 트리거 편집이지만 가능한 경우 다른 기본 편집을 방해하고 싶습니다.
나는 추가를 시도했다 MouseListener
테이블에, 그리고 모든 것을 소비합니다 MouseEvent
s, 그러나 이것은 작동하지 않습니다 - 내가 돌아 오면 true
~에서 isCellEditable()
그러면 청취자는 클릭 이벤트를받지 못하지만 돌아 오면 false
그 다음에 F2 더 이상 작동하지 않습니다.
이벤트 리스너 만 사용하여 달성 할 수 있습니까? 피할 수 있다면 PLAF 기능을 엉망으로 만들지 않기를 원합니다.
해결책
당신은 당신의 자신의 Celleditor를 만들고 ovveride를 만들어야합니다.
public boolean isCellEditable( EventObject e )
EventObject의 클릭 카운트를 사용하여 단일 및 더블 클릭을 구별 할 수 있습니다.
한 번의 클릭과 선택한 셀에있는 경우 true를 반환 할 수 있습니다. 그렇지 않으면 false를 반환 할 수 있습니다.
로우와 열을 검색하십시오
int row = ( (JTable) e.getSource() ).rowAtPoint(e.getPoint());
int column = ( (JTable) e.getSource() ).columnAtPoint(e.getPoint());
F2를 활성화하려면 사용자 정의 입력 맵 EN ActionMap 항목을 추가 할 수 있습니다.
similar too
table.getInputMap().put(KeyStroke.getKeyStroke("DOWN"), "doMyArrowDown");
table.getTable().getActionMap().put("doMyArrowDown", new ArrowDownAction());
그리고 당신의 행동에서 당신은 셀러딩을 해고 할 수 있습니다.
table.editCellAt(row, column );
다른 팁
DefaultCellEditor에는 편집을 위해 마우스 클릭을 제어하기위한 setClickCountToStart () 메소드가 있습니다. 기본값은 2입니다.이를 변경하면 F2 기능에 영향을 미치지 않습니다.
따라서 편집을 트리플 클릭으로 설정할 수 있습니다.
편집을 시작하기 위해 두 번의 클릭을 처리하는 방법을 정확히 잘 모르겠지만 첫 번째 클릭을 추적하기 위해 타이머를 사용한 다음 두 번째 단일 클릭이 시간 간격 내에있는 경우 편집을 수행 할 것 같습니다.
기존을 감싸서 이것을 해결했습니다 CellEditor
a Proxy
그리고 전화를 가로 채기 isCellEditable
, 모든 마우스 이벤트에 대해 거짓을 반환하고 원본에 대한 다른 모든 통화를 위임 CellEditor
.
이것은 Camickr의 솔루션보다 약간 더 복잡하지만 모든 편집자에게는 효과가 있습니다 (모두 4가 있습니다.)