SWT keylistener

darksmilie

Erfahrenes Mitglied
Hi,

Ich habe ein Problem bei einem SWT widget. Ich habe ein keylistener auf ein SWT widget gelegt und möchte eine Tastencombination abfangen wie z.B. ALT + H. Dies ist leider aber nicht möglich da der Listener mir immer nur den keycode von der ersten Taste zurück gibt und nicht von beiden zusammen. Was kann ich in so einem Fall machen?
 
Es gibt zwei unterschiedliche Tastenarten, man unterscheidet zwischen Zeichentasten und Funktionstasten.

Zeichentasten sind dabei solche Tasten, mit denen Buchstaben, Ziffern oder sonstige gültige Unicode-Zeichen eingegeben werden, wie
z.B. [a], [A], [B], [1], [2], [%], [+], aber auch [ESC], [LEER] oder [TAB].

Zu den Funktionstasten gehören beispielsweise [F1], [F2], [POS1] oder [CURSORLINKS], aber auch die Umschalttasten [STRG], [ALT] und [UMSCHALT].

Die Methode keyTyped wird immer dann aufgerufen, wenn eine Zeichentaste gedrückt wurde. Beim Drücken einer Funktionstaste wird sie dagegen nicht aufgerufen. Im Gegensatz dazu wird keyPressed bei jedem Tastendruck aufgerufen, unabhängig davon, ob es sich um eine Zeichentaste oder eine Funktionstaste handelt.
 
Ich denke du suchst das hier:

Java:
public class test extends JFrame implements ActionListener, KeyListener{
    public JButton b;
    public test(){
        this.getContentPane().add(b);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(400, 400);
        this.addKeyListener(this);
        this.setVisible(true);
    public void keyTyped(KeyEvent e) {
        if(e.isAltDown)
        {
             if(e.ketKeyChar().equals("h")){System.out.println("Es wurde Alt+H gedrückt");}
        }
    }
    public void keyPressed(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
}

e.isAltDown(), es gibt noch mehr davon. Also Abfragen ob Funtionstaste gedrückt ist. Must mal Nachschauen
 
Danke für eure tips.

Meine Lösung ist jetzt nicht die beste aber es funktioniert ;).

Code:
  widget.addKeyListener(new KeyAdapter() {
      private int alt = 0;
      public void keyPressed(KeyEvent e) {
        if(e.keyCode == SWT.ALT) {
          alt = SWT.ALT;
        }
      }

      public void keyReleased(KeyEvent e) {
        if(e.keyCode == SWT.ALT) {
          strg = 0;
        }
        if(e.keyCode == 99 && alt == SWT.ALT) { // keycode 99 is key 'c'
          System.out.println("Tastenkombination funktioniert");
        }
      }
    });
 
Zurück