2013-12-25 2 views
1

Я хотел изменить действие по умолчанию ENTER ключа на JTable, так что он имеет ту же функцию, что и F2 ключа. Поэтому я использовал привязки клавиш, и он отлично работает. Только одна проблема: если F2 ключ второй раз на том же редактировании ячейки остановлен, но ключ ENTER не делает то же самое, он всегда начинает редактирование при нажатии. Вот мой код:Java- JTable привязки ключей

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

Благодаря

+2

Во время редактирования ячейки, основное внимание уделяется используются CellEditor. Любой KeyEvent будет прослушиваться редактором, но не сам JTable. Черт! Должен ли я сделать ответ? :( – Sage

+1

Вы все еще можете и должны! –

+0

@HovercraftFullOfEels, я думаю, что я уже сделал аналогичный ответ где-то в другом месте. Ища его и добавлю ссылку в комментарий. Этот вопрос был не совсем таким, но немного более широким в смысл. – Sage

ответ

-1

Как сказал @Sage при редактировании KeyEvent будут прослушаны редактором, но не в JTable, так что я добавил KeyListener к CellEditor моей JTable. Я не знаю, лучшее ли это решение, но на данный момент оно работает так, как ожидалось. Вот код:

field.addKeyListener(new KeyAdapter(){ 
     public void keyPressed(KeyEvent arg0) { 
     if(arg0.getKeyCode()==KeyEvent.VK_ENTER) 
      table.getCellEditor().stopCellEditing();}}); 

поля является JFormattedTextField, который я использовал для установки CellEditor:

DefaultCellEditor editor = new DefaultCellEditor(field); 
    for(int i=0; i<table.getColumnCount(); i++) 
    table.getColumnModel().getColumn(i).setCellEditor(editor); 
+2

Нет, не добавляйте KeyListener ни к чему. Не рекомендуйте это. Он уже знает, как использовать Key Bindings, так почему бы ему дать худшее предложение? –

+0

Точно так же вполне возможно, что событие Enter будет потреблено до того, как оно достигнет вашего слушателя – MadProgrammer