AWT KeyListener, requestFocus und KeyBindings

Leifa

Mitglied
Moin!

Ich habe eine Frage, die wohl schon öfter aufgetaucht ist, und zwar programmiere ich ein Timer-Programm, bei dem man mit der Leertaste die Zeit starten und stoppen kann. Ich habe ich ein Frame mit KeyListener, auf dem auch einige Komponenten liegen. Sobald nun eine andere Komponente den Focus bekommt, reagiert das Programm also nicht mehr auf Tastatureingaben.

Es geht mir darum, dass wann auch immer die Leertaste gedrückt wird, das Programm reagiert, egal welche Komponente gerade den Focus hat. Die jeweilige Komponente soll NICHT auf den Tastendruck reagieren. Gibt es für dieses Problem eine schöne Lösung? Ein ständiges
Code:
requestFocus();
erscheint mir nicht schön.

Und ich habe nicht genau verstanden, was KeyBindings sind. Sind sie meine Lösung? Wenn ja, funktioniert das mit awt?

Gruß
Leif
 

VfL_Freak

Top Contributor
Moin,

Du solltest besser einen eigenen KeyListener für JEDE einzelne Komponente einbauen ...
Zeigt doch mal den Code, damit man es besser einschätzen kann ;)

Gruß
Klaus
 

Leifa

Mitglied
So, habe mal versucht, stark und sinnvoll zu kürzen.
BTW: Ist es gut, wenn mal alle Interfaces im Frame implementiert?

Code:
import java.awt.event.*;
import java.awt.*;

public class Fenster extends Frame implements KeyListener, WindowListener, ItemListener, ActionListener {

    
    // Schriftart
    final Font KLEIN = new Font("Arial", Font.BOLD, 20);
    final Font GROSS = new Font("Arial", Font.BOLD, 60);

    // Komponenten des Fensters
    Choice ch_step, ch_case, ch_algo, ch_stat;
    Button btn_addAlgo, btn_removeAlgo;
    Panel pnl_cube;
    Label lbl_display, lbl_algo;

    /**
     * Konstruktor
     */
    
    public Fenster() {
        
        this.setSize(640,480);
        this.setResizable(false);
        this.setLocation(100,100);        
        
        GridBagLayout gbl = new GridBagLayout();
        setLayout(gbl);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
        gbc.insets = new Insets(10,10,10,10);
        gbc.anchor = GridBagConstraints.CENTER;
        
        // Komponenten initialisieren
        
        // Step-Choice
        ch_step = new Choice();
        ch_step.addItemListener(this);
        ch_step.add("OLL");
        ch_step.add("PLL");
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.gridheight = 1;
        gbc.gridwidth = 2;
        gbl.setConstraints(ch_step, gbc);
        add(ch_step);
        
        // Algo-Choice
        ch_algo = new Choice();
        ch_algo.addItemListener(this);
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.gridheight = 1;
        gbc.gridwidth = 2;
        gbc.weightx = 0.5;
        gbc.weighty = 0;
        gbl.setConstraints(ch_algo, gbc);
        add(ch_algo);
        
        // Remove-Button
        btn_removeAlgo = new Button("Remove");        
        btn_removeAlgo.addActionListener(this);
        gbc.gridx = 3;
        gbc.gridy = 1;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        gbc.weightx = 0;
        gbc.weighty = 0;
        gbl.setConstraints(btn_removeAlgo, gbc);
        add(btn_removeAlgo);
        
        // Add-Button
        btn_addAlgo = new Button("Add");
        btn_addAlgo.addActionListener(this);
        gbc.gridx = 4;
        gbc.gridy = 1;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        gbl.setConstraints(btn_addAlgo, gbc);
        add(btn_addAlgo);

        running = false;
        gesperrt = false;
        
        refreshChoices();
        
        addKeyListener(this);
        addWindowListener(this);
        this.setVisible(true);
        requestFocus();
    }

    /**
     * KeyListener
     */
    
    public void keyTyped(KeyEvent ke) {}
    
    public void keyPressed(KeyEvent ke) {
        if (ke.getKeyCode() == KeyEvent.VK_ESCAPE) {
            if (running) {
                running = false;
            }
            gesperrt = true;
        } else {
            long vergangen = System.currentTimeMillis() - start;
            if (running) {
                ergebnis = vergangen;
                //selectedAlgo.addTime(ergebnis);                
                running = false;
                gesperrt = true;
            }
        }
        repaint();
    }
    
    
    // Taste wird losgelassen
    public void keyReleased(KeyEvent ke) {
        if (gesperrt) {
            gesperrt = false;
            return;
        }
        if (!running) {
            start = System.currentTimeMillis();
            running = true;
            (new Uhr()).start();
        } else {
            running = false;
        }
    }

}
 

VfL_Freak

Top Contributor
Moin,

Du solltest wie gesagt für jede einzelene Komponente einen eigenen Listener anlegen!
Ein globaler - wie hier - für den gesamten Frame, wirkt sich sonst gleichermaßen auf jede der Komponenten aus!

BTW: Ist es gut, wenn mal alle Interfaces im Frame implementiert?

Also ich lagere alle Listener jeweils über eine eigene Adapterklasse (in eigenen Dateien) aus!
Da macht es um Längen übersichtlicher !

Gruß
Klaus
 

Leifa

Mitglied
Soll ich tatsächlich mehrere KeyListener anlegen, oder einen KeyListener, der mehreren Komponenten hinzugefügt wird. Die Aktion beim Tastendruck soll ja die selbe bleiben, dann brauch ich doch nur einen einzigen KeyListener, oder?
Oder meinst Du, ich soll die KeyEvents irgendwie an ein zentrales Objekt weiterleiten, das die Auswertung übernimmt?
Ein bisschen Code wäre sichlich hilfreich!
 

VfL_Freak

Top Contributor
Soll ich tatsächlich mehrere KeyListener anlegen, oder einen KeyListener, der mehreren Komponenten hinzugefügt wird. Die Aktion beim Tastendruck soll ja die selbe bleiben, dann brauch ich doch nur einen einzigen KeyListener, oder?
Richtig, wenn bspw. alle Button genau das Gleiche machen sollen, dann würde ein Listener hier reichen.
Er sollte aber jedem einzelnen Button auch zugeordnet werden!

Gruß
Klaus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
B Swing KeyListener auf Container? AWT, Swing, JavaFX & SWT 1
T Event Handling KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
A Event Handling Muss ich 'KeyListener' tasuend mal zufügen? AWT, Swing, JavaFX & SWT 7
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
S Keylistener reagiert bei Buttons nicht. AWT, Swing, JavaFX & SWT 8
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
X KeyListener AWT, Swing, JavaFX & SWT 0
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
N KeyListener funktioniert nicht richitg AWT, Swing, JavaFX & SWT 4
Z SnakeGame Schlange per KeyListener bewegen! AWT, Swing, JavaFX & SWT 10
T KeyListener AWT, Swing, JavaFX & SWT 2
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9
7 KeyListener tastatur temporär blockieren AWT, Swing, JavaFX & SWT 7
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
U Mouse + Keylistener AWT, Swing, JavaFX & SWT 12
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
J JWindow und keylistener AWT, Swing, JavaFX & SWT 1
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
A Swing KeyEvent mit KeyListener und KeyAdapter kürzer schreiben AWT, Swing, JavaFX & SWT 7
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
C KeyListener AWT, Swing, JavaFX & SWT 5
Doopy Event Handling KeyListener funktioniert nach Restart nicht mehr AWT, Swing, JavaFX & SWT 7
S KeyListener geht nicht AWT, Swing, JavaFX & SWT 12
C Swing KeyListener in JPanel AWT, Swing, JavaFX & SWT 2
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
C JTextField KeyListener AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
E Swing KeyListener implementieren AWT, Swing, JavaFX & SWT 12
P KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 11
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
T KeyListener AWT, Swing, JavaFX & SWT 4
R KeyListener in JWindow AWT, Swing, JavaFX & SWT 7
T BlueJ KeyListener AWT, Swing, JavaFX & SWT 7
Z KeyListener AWT, Swing, JavaFX & SWT 2
M Swing KeyListener in JTextfield AWT, Swing, JavaFX & SWT 4
C Swing KeyListener für JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 8
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
A Keylistener reagiert nicht AWT, Swing, JavaFX & SWT 10
D Problem mit KeyListener AWT, Swing, JavaFX & SWT 2
J KeyListener um auf CTRL-Enter zu reagieren AWT, Swing, JavaFX & SWT 2
L Snake in Java KeyListener Problem AWT, Swing, JavaFX & SWT 30
B "globaler" KeyListener? AWT, Swing, JavaFX & SWT 3
B JTable TableHeader KeyListener AWT, Swing, JavaFX & SWT 4
S Swing KeyListener und JList AWT, Swing, JavaFX & SWT 2
R KeyListener funzt nicht AWT, Swing, JavaFX & SWT 2
X KeyListener AWT, Swing, JavaFX & SWT 4
P KeyListener + Animation AWT, Swing, JavaFX & SWT 2
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
V Problem mit KeyListener im Fullscreen-Modus AWT, Swing, JavaFX & SWT 2
M AWT KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
C Swing KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 7
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
F Tastenabfrage (KeyListener) AWT, Swing, JavaFX & SWT 2
D KeyListener Problem bei JPanel wechsel AWT, Swing, JavaFX & SWT 2
S Swing JTree mit KeyListener AWT, Swing, JavaFX & SWT 2
E JFrame akzeptiert den KeyListener nicht AWT, Swing, JavaFX & SWT 3
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Swing KeyListener hört nur manchmal zu AWT, Swing, JavaFX & SWT 2
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
earlgrey_tea AWT KeyListener bekommt keine Signale AWT, Swing, JavaFX & SWT 3
L Problem mit KeyListener AWT, Swing, JavaFX & SWT 3
A KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 4
D KeyListener-Problem nach dem "Gedrückthalten" einer Taste AWT, Swing, JavaFX & SWT 10
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
B KeyListener Strg+s AWT, Swing, JavaFX & SWT 5
D Globaler Keylistener AWT, Swing, JavaFX & SWT 4
M problem mit keylistener/textarea AWT, Swing, JavaFX & SWT 6
M KeyListener Problem unter Firefox AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, Taste gedrückt halten AWT, Swing, JavaFX & SWT 12
M Komisches Verhalten: JCombobox mit KeyListener AWT, Swing, JavaFX & SWT 13
capgeti SWT KeyListener 2 Tasten Problem AWT, Swing, JavaFX & SWT 3
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
Developer_X AWT KeyListener wird nicht ausgeführt! AWT, Swing, JavaFX & SWT 3
N JFrame und KeyListener AWT, Swing, JavaFX & SWT 6
M KeyListener reagiert nach Buttondruck nicht mehr AWT, Swing, JavaFX & SWT 4
A AWT Button verhindert ausführung vom Keylistener AWT, Swing, JavaFX & SWT 4
R KeyListener hinzufügen AWT, Swing, JavaFX & SWT 7
T Swing KeyListener mit mehreren Objekten AWT, Swing, JavaFX & SWT 2
G KeyListener AWT, Swing, JavaFX & SWT 3
E KeyListener AWT, Swing, JavaFX & SWT 5
L Focus für KeyListener auf verschiedene Panels AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben