2016-07-29 22 views
0

Ich habe diese Anwendung, die einen Datensatz eines Mitarbeiters bearbeiten kann und dazu kann der Benutzer auf diesen bestimmten Datensatz klicken und die Schaltfläche Bearbeiten drücken, oder der Benutzer kann nur drücken Shortcut-Taste in der Tastatur, die ich erstellt habe, die die F2 ist. Hier ist mein Code:Netbeans F2 Tastenanschlag funktioniert nicht bei der Auswahl eines Datensatzes in JTabelle

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 
    } 
}); 

aber mein Problem ist die F2-Tastendruck, die ich erstellt funktioniert nicht, wenn ich auf einem Tisch einen Datensatz klicken. Kann mir jemand sagen, warum es nicht funktioniert, bitte. Vielen Dank im Voraus für die Antwort.

Bearbeiten: Ich habe vergessen zu erwähnen, dass F1, F3-F12 mit meinem Code oben arbeiten, wenn ich einen Datensatz auf einem JTable auswählen. Das einzige Problem ist die F2. Ich bestehe darauf, F2 als eine Edit-Aktion zu verwenden, da mein F1 die Aktion Erstellen für meine Anwendung ist.

Antwort

1

oder der Benutzer kann nur die Tastenkombination in der Tastatur, die ich erstellt, die F2 ist.

Sie haben ein paar Probleme:

  1. Ihr Code F1 als KeyStroke verwendet, nicht F2.
  2. Sie verwenden die InputMap/ActionMap der Schaltfläche, nicht die Tabelle. Sie sollten die KeyBindings für die Tabelle ausführen, nicht die Schaltfläche.
  3. Sie sollten nicht zwei Aktionen erstellen. Stattdessen erstellen Sie eine einzelne Aktion, die von der Schaltfläche und der Tabelle gemeinsam genutzt werden kann.

So würde der Grund Code sein:

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

Es tut mir leid. Ich habe vergessen, das F1 in F2 zu bearbeiten. Ich werde diesen Code jetzt ausprobieren und sehen, ob es funktioniert. Danke fürs Beantworten :) – TheAnonymous94

+0

Nochmals vielen Dank für die Antwort, aber ich bin ein Anfänger und weiß nicht viel über Tastenbindung oder Tastenanschlag. Würde es Ihnen etwas ausmachen, wenn Sie mir bitte sagen könnten, wie ich diesen Code Schritt für Schritt hinzufüge. Dieser Action-Code ist neu für mich. Ich weiß nicht, was ich in 'new EditAction (...)' schreiben soll. – TheAnonymous94

+0

@ TheAnonymous94 sorgfältig, weil F2 ist in accelerator (KeyBindings in API) für TableCellEditor – mKorbel