문제

열을 a에 추가하려고합니다 JTable 다음 동작 (Windows 탐색기 및 유사한 쉘과 유사) :

  • 평소와 같이 셀을 클릭하여 선택할 수 있습니다.
  • 셀을 두 번 클릭하여 별도의 동작을 수행 할 수 있습니다 (외부 프로그램 시작).
  • 셀 값 (문자열)은 두 번째로 한 번 (일시 중지 후)를 클릭하거나 누르면 여전히 편집 할 수 있습니다. F2 셀이 강조되면.

두 번 클릭해야합니다 ~ 아니다 셀의 트리거 편집이지만 가능한 경우 다른 기본 편집을 방해하고 싶습니다.

나는 추가를 시도했다 MouseListener 테이블에, 그리고 모든 것을 소비합니다 MouseEvents, 그러나 이것은 작동하지 않습니다 - 내가 돌아 오면 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가 있습니다.)

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