2014-04-15 2 views
1

일부 열을 편집 할 수없는 JTable이 있습니다. isCellEditable 메서드를 재정의하면됩니다. 이제이 열의 셀을 선택 취소 할 수있게하려고합니다. 사용자가 탭 키를 사용하여 셀을 통과하는 경우 이러한 편집 할 수없는 셀을 "건너 뛰기"에 집중하려고합니다. 이 일이 어떻게 이루어 졌는지 말해 주실 수 있습니까? 감사.열의 셀을 선택 취소하는 방법

답변

3

모든 탐색 동작은 테이블의 actionMap에 등록 된 동작으로 제어됩니다. 따라서 이동 방법은 탭 키에 바인딩 된 동작에 연결하고 필요에 따라 해당 동작을 호출하고 원래 동작을 래퍼로 바꾸는 래퍼를 구현하는 것입니다. 하지 - 편집 가능한 셀을 건너 뛰는

원시 코드 :

Object actionKey = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) 
    .get(KeyStroke.getKeyStroke("TAB")); 
final Action traverseAction = table.getActionMap().get(actionKey); 
Action wrapper = new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     traverseAction.actionPerformed(e); 
     while(shouldRepeat((JTable) e.getSource())) { 
      traverseAction.actionPerformed(e); 
     } 
    } 

    private boolean shouldRepeat(JTable source) { 
     int leadRow = source.getSelectionModel().getLeadSelectionIndex(); 
     int leadColumn = source.getColumnModel().getSelectionModel().getLeadSelectionIndex(); 
     return !source.isCellEditable(leadRow, leadColumn); 
    } 
}; 
table.getActionMap().put(actionKey, wrapper); 
+0

고마워요. 이것은 정말로 도움이되었습니다. – user3245747

관련 문제