Fokus für KeyListener

MK234

Aktives Mitglied
Hallo,

ich programmiere gerade eine GUI, welche mehrere Buttons hat.
Mein Drücken des Leertaste sowie beim Drücken eines bestimmten Buttons soll eine bestimmte Funktion ausgeführt werden.

Leider habe ich das Problem, daß beim Drücken der Leertaste nur dann die gewünschte Funktion ausgeführt wird, wenn ich kurz zuvor auch auf den bestimmten Button gedrückt habe, ansonsten wird beim Drücken dieser Taste immer die Funktion des zuletzt gedrückten Buttons ausgeführt.

Nach meinen bisherigen Recherchen muß ich anscheinend den Button mit dieser Leertaste fokkusieren. Aber wie mache ich das in meinem Programm?


In der Klasse GUI werden die Buttons wie folgt programmiert:
Java:
public class GUI extends JFrame implements  ActionListener {
…...
…..

	private Action action;
…....
…....
	JPanel v2Box = new JPanel(new GridLayout(3, 1));
        	autoButton = new JButton("automatisch");
        	autoButton.setActionCommand("auto");
        	autoButton.addActionListener(action);
        	autoButton.setEnabled(true);
       	 v2Box.add(autoButton);
        
        	manuButton = new JButton("manuell");
        	manuButton.setActionCommand("manu");
        	manuButton.addActionListener(action);
        	manuButton.setEnabled(true);
        	v2Box.add(manuButton);        

	spaceButton = new JButton("Leertaste");
        	spaceButton.addKeyListener(action);
       
        	spaceButton.setActionCommand("leer");
        	spaceButton.addActionListener(action);
        	spaceButton.setEnabled(true);
        	v2Box.add(spaceButton);



In der Klasse Action werden dann die folgenden Funktionen ausgeführt:

public class Action extends JComponent implements ComponentListener,
        ActionListener, KeyListener {
…......
….......

 public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand() == "auto") {
            manuell = false;
            enterGedr = false;
            System.out.println("auto gedrueckt  " + manuell);
           
        }
        else if (e.getActionCommand() == "manu") {
            manuell = true;
            enterGedr = false;
            System.out.println("manu gedrueckt  " + manuell);
            
        }
        else if (e.getActionCommand() == "leer") {
            enterGedr = true;
            System.out.println("Leer gedrueckt");
        }
    }
    
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_SPACE) {
            enterGedr = true;
            System.out.println("Leertaste gedrueckt");
        }
            
    }
    
    public void keyTyped(KeyEvent e) {}
    
    public void keyReleased(KeyEvent e) {}
}
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Erweitere die Input und Actionmap

Außerdem würde ich es nicht so kompliziert machen, sondern jeder Componente einen eigenen Listener geben.
Warum erbt Action von JComponent?
 
Zuletzt bearbeitet von einem Moderator:

MK234

Aktives Mitglied
"requestFocus()" habe ich inzwischen probiert. Hat leider nicht funktioniert.

Habe ihn wie folgt gesetzt:

spaceButton.setActionCommand("leer");
spaceButton.addActionListener(action);
spaceButton.setEnabled(true);
spaceButton.requestFocus();
v2Box.add(spaceButton);
 
S

SlaterB

Gast
auf setEnabled(true); kannst du verzichten, dass ist offensichtlich die Standard-Einstellung bei Buttons,

das requestFocus() kannst du erst nach setVisible(true) ausführen, funktioniert am Anfang nicht,
was nicht bedeutet, dass die setVisible(true) vorziehen sollst, erst alle Komponenten einfügen,
dann setVisible(true), dann requestFocus()
 

MK234

Aktives Mitglied
"requestFocus()" hat leider nicht geklappt, obwohl ich es nach "setVisible(true)" gesetzt habe.

Ich muß immer noch den Button zuerst einmal angeklickt haben, damit die Leertaste funktioniert.

Erweitern von Input und Actionmap ist ziemliches Neuland für mich.
Wie würde diese Erweiterung in meinem Programm aussehen?

Danke
 
S

SlaterB

Gast
zum einfachen (und eher bedenklichen) Weg kannst du alternativ noch
spaceButton.requestFocusInWindow();
versuchen, bei mir klappt es damit, das andere wohl nicht weil später noch sowieso ein Button den Focus bekommen muss,
der erste Button, durch requestFocusInWindow() vielleicht geändert, wer weiß schon all die Swing-Details.. ;)

Java:
public class TestGUI
    extends JFrame
{
    public TestGUI()
    {
        JPanel v2Box = new JPanel(new GridLayout(3, 1));
        JButton autoButton = new JButton("automatisch");
        autoButton.setActionCommand("auto");
        autoButton.setEnabled(true);
        v2Box.add(autoButton);

        JButton manuButton = new JButton("manuell");
        manuButton.setActionCommand("manu");
        manuButton.setEnabled(true);
        v2Box.add(manuButton);

        JButton spaceButton = new JButton("Leertaste");
        spaceButton.setActionCommand("leer");
        spaceButton.setEnabled(true);
        v2Box.add(spaceButton);

        add(v2Box);


        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(200, 200);
        setVisible(true);


        spaceButton.requestFocusInWindow();
    }

    public static void main(String[] args)
    {
        new TestGUI();
    }
}

wenn auch die anderen Buttons gedrückt werden und dennoch die Leertaste weiter funktionieren soll,
wäre ständiger Focus-Wechsel oder so aber wirklich immer übler,
da musst du andere Wege gehen, zu den genannten Stichwörtern erstmal viel lernen
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Auch wenn der Button irgendwann mal den Focus bekommt, sobald eine andere Komponente den Focus hat klappt ein KeyListener wieder nicht.
Darum KeyBindings oder soviel ich weiß Action und Inputmap erweitern sollte auch gehen.
 

Marco13

Top Contributor
Genau darauf bezog sich meine Frage von oben: "Und... wann genau soll "requestFocus" aufgerufen werden?" - Ständig in einer schleife mit einem sleep(10) drin? :autsch: ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Swing Wie bekomme ich den Fokus für einen JPanel AWT, Swing, JavaFX & SWT 5
V Kein Fokus für Key Bindings auf JPanel bzw JApplet AWT, Swing, JavaFX & SWT 2
M KeyEvent ohne Fokus konsumieren AWT, Swing, JavaFX & SWT 1
H Swing Wie Fokus von JTextField entfernen? AWT, Swing, JavaFX & SWT 9
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
M JavaFX Absoluter Fokus während drag Event AWT, Swing, JavaFX & SWT 10
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
C SWT MenuBar & MenuItems Fokus wenn F10 unterdrücken/entfernen AWT, Swing, JavaFX & SWT 9
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
B Swing Fokus auf JPanel setzen AWT, Swing, JavaFX & SWT 2
J Swing Fokus JInternalFrame fehlerhaft AWT, Swing, JavaFX & SWT 4
B Fokus markierung entfernen AWT, Swing, JavaFX & SWT 2
C AWT Fokus von Component entfernen, wenn kein anderes vorhanden AWT, Swing, JavaFX & SWT 4
A Vordergrund und Fokus setzten oder Modales Einabefeld AWT, Swing, JavaFX & SWT 28
G SWT Fokus auf MsgBox setzen AWT, Swing, JavaFX & SWT 3
A Fokus wieder in ein JTextField setzen AWT, Swing, JavaFX & SWT 4
N Filternde Combobox in JTable verliert Fokus nach erster Eingabe AWT, Swing, JavaFX & SWT 2
J Swing Wie Fokus richtig setzen? AWT, Swing, JavaFX & SWT 7
T Swing Fokus AWT, Swing, JavaFX & SWT 2
H Swing Problem mit FocusCycleRoot, der FocusTraversalPolicy und dem Fokus AWT, Swing, JavaFX & SWT 2
G Problem beim setzen des Fokus AWT, Swing, JavaFX & SWT 4
E Swing Mit rechter Maustaste Fokus in JList setzen?! AWT, Swing, JavaFX & SWT 3
F Rechte Maustaste auf TreeNode soll den Fokus auf diese setzen AWT, Swing, JavaFX & SWT 6
agent47 Swing auf Schnelltaste ohne Fokus hören AWT, Swing, JavaFX & SWT 2
M JSpinner als TableCellEditor; buttons nur bei fokus sichtbar AWT, Swing, JavaFX & SWT 14
Z Fokus auf Eingabefeld bei showMessageDialog setzen AWT, Swing, JavaFX & SWT 3
N Herkunft des Fokus erkennbar (via Klick oder Tab-Steuerung)? AWT, Swing, JavaFX & SWT 4
F Panel kann nicht Fokus erhalten AWT, Swing, JavaFX & SWT 2
N Textfeld füllen sobald es den Fokus verliert AWT, Swing, JavaFX & SWT 2
D JTable, Model, Fokus AWT, Swing, JavaFX & SWT 3
multiholle AWT Hotkey ohne Fokus AWT, Swing, JavaFX & SWT 6
W JTextArea/TextArea kriegt keinen Fokus AWT, Swing, JavaFX & SWT 6
T Fokus auf CB in Table mit beliebiger Taste AWT, Swing, JavaFX & SWT 12
G JOptionPane.showInputDialog(): Texteingabe und Fokus AWT, Swing, JavaFX & SWT 3
R Fokus von GUI-Elementen AWT, Swing, JavaFX & SWT 3
F Herausfinden, auf welchem Objekt der Fokus liegt AWT, Swing, JavaFX & SWT 2
V JTable verliert Fokus, wie offene Zelle schliessen? AWT, Swing, JavaFX & SWT 5
S Eventhandling obwohl Fenster nicht im Fokus AWT, Swing, JavaFX & SWT 5
GilbertGrape bei "Enter" Funktion ausführen, egal wo der Fokus AWT, Swing, JavaFX & SWT 2
A Fokus in ein Textfeld setzen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A ComboBox soll reagieren ohne fokus AWT, Swing, JavaFX & SWT 7
C Probleme einem JPanel den Fokus zuzuweisen AWT, Swing, JavaFX & SWT 2
A Fokus und JTextField AWT, Swing, JavaFX & SWT 35
T JList mit eigenem TransferHandler: Fokus(?)-Probleme AWT, Swing, JavaFX & SWT 4
D JButton mit Fokus soll auf ENTER reagieren AWT, Swing, JavaFX & SWT 3
M Frame erhält ungewollt den Fokus AWT, Swing, JavaFX & SWT 10
V JTable Handling Fokus on Keystroke und Maus Doubleclick AWT, Swing, JavaFX & SWT 9
S JTextArea mit Scrollbar,append Text mit Fokus? AWT, Swing, JavaFX & SWT 5
G Event, wenn JTextField Fokus verliert? AWT, Swing, JavaFX & SWT 2
C Der hartnäckige Fokus AWT, Swing, JavaFX & SWT 3
G Keylistener/Fokus Problem AWT, Swing, JavaFX & SWT 3
B Fokus Problem unter Linux AWT, Swing, JavaFX & SWT 7
J JFrame und Fokus AWT, Swing, JavaFX & SWT 4
N Fokus Reihenfolge ändern AWT, Swing, JavaFX & SWT 12
M Fokus auf ein JTextfield in einem JDialog setzen AWT, Swing, JavaFX & SWT 6
I fokus AWT, Swing, JavaFX & SWT 4
J Anzeige ID und Markierung für Knoten in Eclipse & Swing AWT, Swing, JavaFX & SWT 4
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 21
Juelin Für Java-Spezialisten AWT, Swing, JavaFX & SWT 4
H JTabel - RowFilter Daten für Berechnung filtern AWT, Swing, JavaFX & SWT 6
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
komplettlost Vollbildmodus für MacOs Nutzer geht nicht AWT, Swing, JavaFX & SWT 13
D JavaFX Schadensberechnung für Kartenspiel AWT, Swing, JavaFX & SWT 1
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
L actionListener für Button AWT, Swing, JavaFX & SWT 97
izoards Textfeld für Zeit AWT, Swing, JavaFX & SWT 4
CptK Wie funktioniert contains() für Path2D.Double AWT, Swing, JavaFX & SWT 10
T Getter und Setter für eine Stage AWT, Swing, JavaFX & SWT 6
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
T Button für GUI programmieren AWT, Swing, JavaFX & SWT 1
Z Switch Case für Buttons AWT, Swing, JavaFX & SWT 8
M Hough-Transformation für Kreise und andere Formen AWT, Swing, JavaFX & SWT 3
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
E Keystroke für Ausschneiden läßt sich nicht ändern AWT, Swing, JavaFX & SWT 2
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
MiMa Package Struktur für GUI Programmierung AWT, Swing, JavaFX & SWT 26
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
B eclipse für JavaFx setuppen AWT, Swing, JavaFX & SWT 4
K Swing Struktur für TreeTable rekursiv aufbauen AWT, Swing, JavaFX & SWT 17
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
H Ein Patten für das Gluon Mobile Framework AWT, Swing, JavaFX & SWT 7
J Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ? AWT, Swing, JavaFX & SWT 10
F JFormattedTextField für kg und Währung AWT, Swing, JavaFX & SWT 6
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
Soloeco JavaFX Dreifachklick für MenuButton erforderlich AWT, Swing, JavaFX & SWT 2
L JavaFX Lösungsvorschläge für dieses coole Control AWT, Swing, JavaFX & SWT 8
looparda Suche Lib für Visualisierung von Graphen AWT, Swing, JavaFX & SWT 12
G LayoutManager Beliebige Anzahl von Panels für LayoutManager AWT, Swing, JavaFX & SWT 3
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
S Swing Finde Grund für NullPointerExeption nicht. AWT, Swing, JavaFX & SWT 2
W JavaFX (j)Unittests für GUI AWT, Swing, JavaFX & SWT 0
B JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben