2016-07-29 15 views
0

У меня есть это приложение, которое может редактировать запись сотрудника и для этого пользователь может щелкнуть эту конкретную запись и нажать кнопку «Изменить», или пользователь может просто нажать ярлык на клавиатуре, которую я создал, которая является F2. Вот мой код:Netbeans F2 Неисправность нажатия клавиш при выборе записи в JTable

btn_EditEmployee.getInputMap(btn_EditEmployee.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0), "btn_EditEmployee"); 
    btn_EditEmployee.getActionMap().put("btn_EditEmployee", new AbstractAction() { 
     public void actionPerformed(ActionEvent e) { 
      //my code for editing an employee 
    } 
}); 

, но моя проблема заключается в F2 нажатии клавиши, что я создал не работаю, если я нажимаю запись на столе. Может кто-нибудь сказать мне, почему он не работает, пожалуйста. Заранее спасибо за ответ.

Редактировать: Я забыл упомянуть, что F1, F3-F12 работают с моим кодом выше, когда я выбираю запись на JTable. Единственная проблема - F2. Я настаиваю на том, чтобы использовать F2 как действие «Редактировать», потому что мой F1 - это действие «Создать действие» в моем приложении.

ответ

1

или пользователь может просто нажать клавишу быстрого доступа на клавиатуре, которую я создал, которая является F2.

У вас есть несколько проблем:

  1. Ваш код с помощью F1 как клавиши, а не F2.
  2. Вы используете InputMap/ActionMap кнопки, а не таблицу. Вы должны делать KeyBindings для таблицы, а не кнопку.
  3. Вы не должны создавать два действия. Вместо этого вы создаете одно действие, которое может использоваться совместно с кнопкой и таблицей.

Так основной код будет:

Action action = new AbstractAction(...) 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     // add logic here 
    } 
}; 

JButton button = new JButton(action); 

String key = "EditAction" 
KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_R, 0); 
InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 
im.put(ks, key); 
table.getActionMap().put(key, action); 
+0

Я сожалею. Я забыл отредактировать F1 в F2. Я попробую этот код прямо сейчас и посмотрю, работает ли он. Спасибо за ответ :) – TheAnonymous94

+0

Еще раз спасибо за ответ, но я новичок и мало знаю о привязке клавиш или нажатой клавише. Не могли бы вы рассказать мне, как добавить этот код шаг за шагом. Этот код действия для меня новичок. Я не знаю, что писать в новом EditAction (...); – TheAnonymous94

+0

@ TheAnonymous94 тщательно, потому что F2 встроен в ускоритель (KeyBindings в API) для TableCellEditor – mKorbel