2014-06-24 1 views
0

Enter 키를 JTable의 탭 키처럼 작동 시키길 원합니다. 이 문제는 이미 몇 시간 전에 물어 보았습니다.이 페이지에있는 해결책을 사용했습니다 : Use Enter Key Act Like Tab Key on jTable.다음에 초점을 맞추십시오 cellEditor를 선택하고 Enter 키를 누를 때 JTable에서 모든 텍스트를 선택하십시오

KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0); 
    KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); 
    InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 
    im.put(enter, im.get(tab)); 

그리고 솔루션은 매력처럼 작동합니다. Tab 키를 사용하여 때, 나는 JTable의의 changeSelection을 무시하고, 다음 셀에서 텍스트 필드의 텍스트 선택 SelectAll하는 셀 에디터의 getTableCellEditorComponent을 무시했습니다 cellEditor가

JTable의

@Override 
    public void changeSelection(int row, int column, boolean toggle, boolean extend) { 
     super.changeSelection(row, column, toggle, extend); 

     if (editCellAt(row, column)) { 
      Component editor = getEditorComponent(); 
      editor.requestFocusInWindow(); 
     } 
    } 

의를

@Override 
    public Component getTableCellEditorComponent(JTable table, 
      Object value, boolean isSelected, int row, int column) { 

      if (isSelected) { 
       SwingUtilities.invokeLater(new Runnable() { 

       @Override 
       public void run() { 
        textField.selectAll(); 
       } 
       }); 
      } 
      return super.getTableCellEditorComponent(
       table, value, isSelected, row, column); 
    } 

그래서 내가 다음 키를 누르면 다음 셀이 포커스되고 텍스트가 선택됩니다.하지만 입력 키를 누르면 셀이 느슨한 포커스를 처음 입력하고 두 번째 키는 다음 셀 포커스를 입력합니다. 그 안에있는 텍스트가 선택됩니다.

그래서 제 질문은 : 셀에서 느슨한 초점을 입력 한 다음 하나의 초점을 얻을 수 (그래서 정확히 탭 키와 같은 역할을) 알고하지 마십시오

답변

0

그래서 첫 번째 방법이 있나요 그것은 차이를 만들 것입니다하지만 난 그냥 셀 선택 할 수있는 changeSelection (...) 메소드를 오버라이드 (override) 한 :

if (editCellAt(row, column)) 
{ 
    Component editor = getEditorComponent(); 
    editor.requestFocusInWindow(); 
    ((JTextComponent)editor).selectAll(); 
} 

포스트가 도움이되지 않을 경우 문제를 보여주는 SSCCE합니다.

관련 문제