Swing keyPressed wird nicht erreicht

mugsawaay

Aktives Mitglied
Hallo,

wenn bei nachfolgendem Code die zeile 22 auskommentiert wird funktioniert der keylistener
ansonsten nicht

Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;

public class XTestGui extends JFrame implements  KeyListener 
{
	
	public XTestGui()
	{
		super("XTestGui");
		this.addKeyListener(this);
		Container panel1 = this.getContentPane();
	
    JToolBar toolbar = new JToolBar("Toolbar", JToolBar.HORIZONTAL);
		JButton cutbutton = new JButton("ABC");
		toolbar.add(cutbutton);		// wenn weg, ok!

		panel1.add(toolbar,BorderLayout.NORTH);
		
		setSize(1000,800);
   	setLocation (400,200);
   	setVisible(true);
   	revalidate();
	}

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


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

was ist hier falsch?

danke Gü
 

Fab1

Top Contributor
Also das Problem hierbei ist, dass die KeyEvents nur ausgeführt werden, wenn das direkte Fenster den Fokus hat. Also nicht der Button. Warum dies allerdings so ist, kann ich dir momentan nicht sagen. Man könnte dem Button beispielsweise auch so einen KeyListener verpassen, dann würde es gehen.
 

mugsawaay

Aktives Mitglied
ja danke

aber bin jetzt nicht wirklich schlauer.

das war jetzt nur ein auszug aus dem eigentlichen Programm.
habe solange zeug rausgeschmissen bis der listener endlich reagierte.
ich kann ja jetzt nicht sämtlichen komponenten einen listener verpassen.
es muß doch eine andere Lösung geben.
im moment behelfe ich mich damit in der menue Leiste das zu implementieren was ich will
aber irgendwie ist das nicht wirklich befriedigend

gruß gü
 

eRaaaa

Top Contributor
Wie Fab1 schon angemerkt hat, bekommt dein neuer Button ABC den Focus.
In deinem Code könntest du vor dem setVisible ein this.setFocusable(true); und this.requestFocus(); einfügen, dann sollte es auch mit dem ABC Button gehen. Das Problem bleibt aber dennoch. Sobald ich den Button drücke, bekommt er wiederum den Fokus. Was du ausserdme machen könntest ist deine Komponenten (hier der ABC Button) setFocusable(false); zu setzen.

Normalerweise gibt es für dieses Problem KeyBindings :rtfm:
 

mugsawaay

Aktives Mitglied
ja danke nochmal

das beispiel mit dem textpane ist sehr anschaulich genau das wäre das was ich bräuchte aber wie wende ich das auf einen frame an?

falls es jemand verstanden hat wäre es nett, wenn jemand in meinem Code "CTR Z" abfangen könnte

danke

gruß gü
 

eRaaaa

Top Contributor
Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;

public class XTestGui extends JFrame {

	public XTestGui() {
		super("XTestGui");
		Action pressed = new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("pressed");
			}
		};
		JPanel panel1 = (JPanel) this.getContentPane();
		panel1.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK), "pressed");
		panel1.getActionMap().put("pressed", pressed);

		JToolBar toolbar = new JToolBar("Toolbar", JToolBar.HORIZONTAL);
		JButton cutbutton = new JButton("ABC");
		toolbar.add(cutbutton);

		panel1.add(toolbar, BorderLayout.NORTH);
		
		setSize(1000, 800);
		setLocation(400, 200);
		setVisible(true);
		revalidate();
	}

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

bzw
Java:
		Action pressed = new AbstractAction() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("pressed");
			}
		};
		JPanel panel1 = (JPanel) this.getContentPane();
		panel1.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK), "pressed");
		panel1.getActionMap().put("pressed", pressed);
 

mugsawaay

Aktives Mitglied
Hallo Basti,

die erste Variante hat bei mir nicht funktioniert, dafuer aber die 2te wenn man "Action" durch "AbstractAction" ersetzte.
vielen Dank für die Antwort

Gruß Gü
 

mugsawaay

Aktives Mitglied
Hallo nochmal,

nachdem ich das jetzt in das "richtige" Programm eingebaut habe und ein neues JPanel hinzugefügt habe
funktioniert es leider nicht mehr.
Aber: führt man diesen Punkt "CTR Z" in der Menue leiste auf, dann funktioniert es exakt so, wie es soll, vollkommen egal, ob nun ein Butten ein Label ein Panel oder sonstwer den Focus hat.

Java:
private void setCtrAccelerator(JMenuItem mi, char c) {
		KeyStroke ks = KeyStroke.getKeyStroke(c, Event.CTRL_MASK);
		mi.setAccelerator(ks);
	}

nur so zur Info

gruß Gü
 

zl

Neues Mitglied
Hallo , ich hoffe jemand kann mir weiter helfen . Hab angefangen ein 2D spiel , ähnlich wie Flappy Bird , zuschreiben. hab einen spielfeld und den vogel , der Spielfeld bewegt sich nach links , jetzt wollte ich dass mein Vogel auf tasten reagiert , bzw der vogel soll nach oben und unten fliegen können.
Java:
public class Spieler {
    public static final int  MAX_UP = 10;// max nach oben
    public static final int MAX_DOWN = 450;// max nach unten
     static BufferedImage img;
    static {
        try {
            img = ImageIO.read(Spielfeld.class.getClassLoader().getResource("img/vogel.png"));
        } catch (IOException ex) {
        }
   } 
    
    int strecke = 40;
    int g = 2; //geschwindigkeit
    int x = 100; // position des vogels auf dem feld
    int y = 30;
    int dy = 0;
    int feld1=0;  // feld 1
    int feld2=860;
    public void fliegen(){
        strecke += g;
        y -= dy;
        if(feld2-g<=0){
            feld1=0;
            feld2=860;
        }else{
        
        feld1-=g;
        feld2-=g;
    }
}
    public void KeyPressed(KeyEvent e){// taste gedrückt
       int key = e.getKeyCode();
       if(key==KeyEvent.VK_UP){
           dy = 5;
       }
       if(key==KeyEvent.VK_DOWN){
           dy = -5;
    }
    }
    public void KeyReleased(KeyEvent e){
       // JOptionPane.showMessageDialog(null, " taste gedrückt");
        int key = e.getKeyCode();
       if(key==KeyEvent.VK_UP ||key==KeyEvent.VK_DOWN){
           dy = 0;
       } 
    }
    
}

Java:
public class Spielfeld extends JPanel implements ActionListener{
    Timer timer = new Timer (20,this);
    
    
    
   static BufferedImage img;
    static {
        try {
            img = ImageIO.read(Spielfeld.class.getClassLoader().getResource("img/feld.png"));
        } catch (IOException ex) {
            //Logger.getLogger(Spielfeld.class.getName()).log(Level.SEVERE, null, ex);
         //   ex.printStackTrace();
        }
        
    }
    Spieler vogel = new Spieler();
    @Override
    public void paint(Graphics g){
        g = (Graphics2D)g;
        g.drawImage(img, vogel.feld1, 0, null);
         g.drawImage(img, vogel.feld2, 0, null);
        g.drawImage(Spieler.img,30, 250, null);
    
        
    }
    public Spielfeld(){
        timer.start();
        addKeyListener(new MyKeyAdapter());
        setFocusable(true);
    }
    private class MyKeyAdapter extends KeyAdapter{
       @Override
       public void keyPressed(KeyEvent e){
        vogel.KeyPressed(e);
           
       } 
       @Override
       public void keyReleased(KeyEvent e){
            vogel.KeyReleased(e);
       }
    }
 

    @Override
    public void actionPerformed(ActionEvent e) {
       vogel.fliegen();
       repaint();
    }
    
    
}


Theoretisch müsste es funktionieren , verstehe nicht woran es liegt , kann jemand mir bitte paar Tipps geben.
Danke
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Javafx KeyPressed Steuerung AWT, Swing, JavaFX & SWT 2
C KeyPressed funktioniert auf iOS nicht richtig? AWT, Swing, JavaFX & SWT 4
A KeyPressed AWT, Swing, JavaFX & SWT 115
O Doppelte Ausführung von KeyPressed AWT, Swing, JavaFX & SWT 7
H Reihenfolge z.B. KeyPressed in Child/Parent AWT, Swing, JavaFX & SWT 11
A KeyPressed gibt mir immer 0 AWT, Swing, JavaFX & SWT 8
P Methode wird nicht überprüft AWT, Swing, JavaFX & SWT 4
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
G JavaFX LineChart Datenpunkte Markierung wird abgeschnitten AWT, Swing, JavaFX & SWT 1
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
N €-Zeichen wird nicht akzeptiert AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
S Javafx getResource-Pfad wird nicht erkannt AWT, Swing, JavaFX & SWT 7
U Warum wird zweimal die Affinetransformation estellt (2Dgraphics, Java)? AWT, Swing, JavaFX & SWT 31
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
ProggersWorld JavaFX TextArea BackgroundImage wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
M Nach Export als Runnable Jar wird css nicht merh gefunden AWT, Swing, JavaFX & SWT 22
izoards Outlook Mail erstellen - Signatur wird nicht angezeigt. AWT, Swing, JavaFX & SWT 3
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
J Java FX NullPointerException, ObservableList wird in View nicht angezeigt.. AWT, Swing, JavaFX & SWT 34
S Next_Button wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 6
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
J Komponente wird manchmal falsch gezeichnet AWT, Swing, JavaFX & SWT 0
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
J setOnCloseRequest wird nicht ausgelöst AWT, Swing, JavaFX & SWT 3
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13
B JavaFX Bei Scenen-Wechsel im primaryStage wird aktuelle Fenstergröße nicht mit übernommen AWT, Swing, JavaFX & SWT 16
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
kodela BufferStrategy wird nicht gefunden AWT, Swing, JavaFX & SWT 5
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
S ImageView wird dem Gridpane nicht zugefügt AWT, Swing, JavaFX & SWT 1
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing GUI wird nach invokeLater() langsam AWT, Swing, JavaFX & SWT 19
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
T JavaFX Nach Zoomen wird an falscher Stelle gezeichnet AWT, Swing, JavaFX & SWT 0
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
cool_brivk24 AWT BufferedImage wird nicht geladen AWT, Swing, JavaFX & SWT 17
S JavaFX Wird es überhaupt genutzt? AWT, Swing, JavaFX & SWT 3
FRI3ND GUI wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Canvas wird nicht angezeigt AWT, Swing, JavaFX & SWT 10
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Wert in JTextField wird falsch ausgegeben AWT, Swing, JavaFX & SWT 2
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
J Aus welchen Grund wird der Button nicht angezeigt im GridPane? AWT, Swing, JavaFX & SWT 1
J MouseListener wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 4
E Swing Liste in Scrollpane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Controller wird zu groß, was tun ? AWT, Swing, JavaFX & SWT 5
CptK Wieso wird nur ein Teil meiner Buttons angezeigt? AWT, Swing, JavaFX & SWT 1
T Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Aktion ausführen wenn ein JRadiobutton deselektiert wird. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
zhermann TableView wird nicht gefüllt AWT, Swing, JavaFX & SWT 14
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
zhermann JavaFX Main App wird nicht geöffnet AWT, Swing, JavaFX & SWT 6
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
M Swing Inhalt meines JTables wird falsch dargestellt AWT, Swing, JavaFX & SWT 8
T Default Table wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
K JavaFX Stage wird nicht angezeigt AWT, Swing, JavaFX & SWT 9
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
D iText PDF wird nach Neustart nicht importiert AWT, Swing, JavaFX & SWT 0
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
X JavaFX AreaChart area höhe wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 2
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
S Swing Konstruktor wird nicht rechtzeitig fertig? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben