[Java] Schleife mit Tastendruck beenden

03/22/2013 18:14 wasgehtso#1
Also, da ich keine Lust habe meine Programme mit Buttons zu steuern, habe ich mich dazu entschlossen es mit Tasten zu versuchen, nur leider funktioniert das garnicht bei mir. Ich habe es schon länger gegoogelt und irgendwie sollte es mit


if (e.getKeyCode() == KeyEvent.VK_LEFT)

funktionieren, aber leider tut es das nicht. Kann mir bitte jemand sagen was ich falsch mache?
03/22/2013 18:28 dowhile#2
KeyListener auch hinzugefügt? Component fokusiert (requestFocusInWindow())?
03/22/2013 19:01 wasgehtso#3
keylistener hinzugefügt, aber das mit dem fokusiert nciht :D danke :) ehm, wie addet man das denn ? :D
03/22/2013 19:30 dowhile#4
Mit der Methode requestFocusInWindow() / requestFocus() von dem Component, der fokusiert werden soll. Muss aber natürlich nicht sein, dass es daran liegt.
03/22/2013 22:39 wasgehtso#5
ich bin irgendwie zu doof, kannst du mal bitte n beispiel geben :D

Kann mir bitte jemand ein funktionierendes Beispiel zeigen und dazu vllt noch ne kurze Erklärung, ich verzweifel hier total, ich hab quasi den ganze Abend versucht Das verzweifelt Zum Laufen zu bringen, aber irgendwie funktioniert Das nicht. Hat nicht irgendjemand vllt noch ein Projekt wo es sowas benutzt hat und mir hier die wichtigen Ausschnitte hinposten könnte? Is echt wichtig...
03/23/2013 19:48 dowhile#6
Hey,

Quote:
Originally Posted by wasgehtso View Post
ich bin irgendwie zu doof, kannst du mal bitte n beispiel geben :D

Kann mir bitte jemand ein funktionierendes Beispiel zeigen und dazu vllt noch ne kurze Erklärung, ich verzweifel hier total, ich hab quasi den ganze Abend versucht Das verzweifelt Zum Laufen zu bringen, aber irgendwie funktioniert Das nicht. Hat nicht irgendjemand vllt noch ein Projekt wo es sowas benutzt hat und mir hier die wichtigen Ausschnitte hinposten könnte? Is echt wichtig...
klar. Du kannst aber auch deinen Quelltext zeigen und wir helfen dir, diesen zu korrigieren.

Folgendes Beispiel legt ein Fenster an und registriert einen KeyListener, der immer den Tastencode (Rückgabe von getKeyCode()) ausgibt, wenn eine Taste gedrückt wurde:

Code:
JFrame frame = new JFrame();
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(new KeyAdapter() {

    @Override
    public void keyPressed(KeyEvent ke) {
        System.out.println("Taste gedrueckt: " + ke.getKeyCode());
    }
});
frame.setVisible(true);
Hingegen wird in folgendem Code ein Fenster mit einem JPanel angelegt und der Listener wird dem JPanel hinzugefügt. Da das Panel keinen Fokus hat, wird es manuell mit requestFocusInWindow() fokusiert. Die Methode muss aufgerufen werden, nachdem das JFrame sichtbar ist.

Code:
JFrame frame = new JFrame();
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
JPanel panel = new JPanel();
panel.addKeyListener(new KeyAdapter() {

    @Override
    public void keyPressed(KeyEvent ke) {
        System.out.println("Taste gedrueckt: " + ke.getKeyCode());
    }
});
        
frame.setContentPane(panel);
frame.setVisible(true);
panel.requestFocusInWindow(); // ohne das würde nichts ausgegeben werden
Aber wie gesagt, du kannst auch deinen Quelltext zeigen und wir suchen dort nach dem Fehler ...
03/23/2013 21:12 wasgehtso#7
package PackRobot;

import java.awt.*;

import javax.swing.*;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;

import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;




public class AnwRobot extends JFrame implements KeyListener {







public AnwRobot()

{
this.addKeyListener(this);
}

public void fuehreAus() // fuehreAus wird initisisiert
{
keyReleased(null);
keyTyped(null);
keyPressed(null);

}









@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}


public void keyPressed(KeyEvent e) {

if(e.getKeyChar() == KeyEvent.VK_SPACE) {

System.out.println("Klappt");
}

}



}



ja, das ist mein Quellcode
03/23/2013 23:31 dowhile#8
Hey,

wieso rufst du die key*-Methoden in fuehreAus() auf? Die Methode werden vom "System" aufgerufen - du musst die nicht selber aufrufen. Da du "null" als Parameter übergibst solltest du dadurch sogar eine NullPointerException erhalten.

Ansonsten kann ich an deinem Quelltext keine Fehler erkennen. Ich habe das Fenster mit folgendem Quelltext eingeblendet:

Code:
new AnwRobot().setVisible(true);
und "Klappt" wird ausgegeben, wenn ich die Leertaste drücke.

Ist das Fenster bei dir sichtbar (d.h. rufst du setVisible() auf)?