2016-04-05 5 views
0

Bitte lesen Sie meinen Beispielcode.Hinzufügen von Key Listener zu JPopupMenu von einem JTextPane funktioniert, aber nicht von JTextArea

JPopupMenu popUp = new JPopupMenu(); 
popUp.add(new JMenuItem("sample1")); 
popUp.add(new JMenuItem("sample2")); 

popUp.addKeyListener(new KeyListener() { 
    @Override 
    public void keyTyped(KeyEvent e) { 
     System.out.println("yy"); 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     System.out.println("yy"); 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 
     System.out.println("yy"); 
    } 
}); 
popUp.setVisible(true); 
popUp.show(textPane, 0, 0); 
popUp.requestFocus(); 

Der gleiche Code funktioniert nicht, wenn eine JTextArea als übergeordnete Komponente für das Pop-up verwenden. Meine Logik besteht darin, den Fokus auf das Popup-Fenster zu legen und dann die Taste zu drücken, um das Pop-up erneut zu füllen.

Antwort

3

Ich bin nicht wirklich sicher, was Sie versuchen zu tun. Sie sollten keinen KeyListener zu einem Popup hinzufügen müssen. Ein Popup-Menü unterstützt bereits den Wechsel von einem Gegenstand zu einem anderen.

Lesen Sie den Abschnitt aus dem Swing-Tutorial auf Bringing Up a Popup Menu für weitere Informationen und Beispiele.

Verwenden Sie die Taste, um das Pop-up erneut zu füllen.

Sie sollten die Elemente des Popups einstellen, bevor das Popup sichtbar gemacht wird.

Schlüssel Zuhörer JPopupMenu aus einem JTextPane Hinzufügen funktioniert, aber nicht von JTextArea

Dann ein SSCCE veröffentlichen, der den Arbeitscode und den nicht funktionierenden Code demonstriert. Wenn wir verstehen, was Sie zu tun versuchen, können wir möglicherweise eine bessere Alternative für beide Komponenten bieten.

0

Folgendes funktioniert für mich. Können Sie die Population der Pop-up-Logik näher erläutern?

JPopupMenu popUp = new JPopupMenu(); 
    popUp.add(new JMenuItem("sample1")); 
    popUp.add(new JMenuItem("sample2")); 

    popUp.addKeyListener(new KeyListener() { 
     @Override 
     public void keyTyped(KeyEvent e) { 
      System.out.println("yy"); 
     } 

     @Override 
     public void keyPressed(KeyEvent e) { 
      System.out.println("yy"); 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      System.out.println("yy"); 
     } 
    }); 

    JFrame f = new JFrame(); 
    JTextArea txtArea = new JTextArea(); 
    f.add(txtArea); 
    f.setSize(300, 150); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
    popUp.setVisible(true); 
    popUp.show(txtArea, 0, 0); 
    popUp.requestFocus();