ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
3418
3418
EMPFEHLEN
-
Hi
Ich programmiere an einem Spiel. Es gibt eine Art Startmenü wovon aus sich das eigentliche Spiel starten lässt. Nun möchte ich, dass man während dem Spiel durch drücken irgendeiner Taste wieder ins Menü zurück kommt. Ich habe dazu ein KeyListener eingebaut. Der reagiert aber nicht =(
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
import java.awt.*; import java.awt.event.*; /** * * Fenster * * @version 1.0 vom 20.11.2006 * @author Florian Ferg */ public class Fenster extends Frame { private Robot rob; private int breite; private int hoehe; private Panel menu; private Spielfeld spl; private Button start; private Button exit; // Ende Variablen public Fenster() { super( "GNOP" ); try { rob = new Robot(); } catch(AWTException e) { } Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); breite = (int)d.getWidth(); hoehe = (int)d.getHeight(); setSize(breite, hoehe); setLayout(null); menu = new Panel(); menu.setSize(100, 100); menu.setLocation((breite / 2) - (menu.getWidth() / 2), (hoehe / 2) - (menu.getHeight() / 2)); menu.setLayout(new GridLayout(2, 1, 0, 10)); start = new Button( "Start" ); menu.add(start); start.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { startActionPerformed(evt); } }); exit = new Button( "Exit" ); menu.add(exit); exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { exitActionPerformed(); } }); add(menu); [COLOR="Red"] addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent evt) { System.out.println("" + evt.getKeyChar()); goToMenu(); } });[/COLOR] setResizable(false); setUndecorated( true ); setBackground( new Color( 25, 25, 112 ) ); setVisible(true); } public void goToMenu() { setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); menu.setVisible(true); } public void startActionPerformed(ActionEvent evt) { menu.setVisible(false); spl = new Spielfeld(); spl.setLocation( ( breite / 2 ) - ( spl.getWidth() / 2 ), ( hoehe / 2 ) - ( spl.getHeight() / 2 ) ); add( spl ); setCursor(Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage(""), new Point(0,0), "invisible")); addMouseMotionListener( new MouseMotionAdapter() { public void mouseMoved( MouseEvent evt ) { if(evt.getX() < spl.getX()) { rob.mouseMove(spl.getX(), spl.getY()); } else if(evt.getX() > spl.getX() + spl.getWidth()) { rob.mouseMove(spl.getX() + spl.getWidth(), spl.getY()); } else if(evt.getY() < spl.getY() || evt.getY() > spl.getY() + spl.getHeight()) { rob.mouseMove(evt.getX(), spl.getY()); } } }); } public void exitActionPerformed() { System.exit(0); } }
Kann mir irgendwer weiterhelfen?
Danke im Vorraus =)
Gruß, Flo
-
Nabend!
Das Problem ist, dass du den Focus auf dem Button hast.
Du weist ja nen KeyListener dem Fenster zu, das hat aber nicht den Focus.
2 Möglichkeiten:
1) start.setFocusable(false) und exit.setFocusable(false)
2) ein "Globaler" keylistener, der alle Tastatureingaben abfängt, unabhängig, welches element den Focus hat (halte ich persönlich auhc für die bessere Lösung
mfg,
MuddinHipHop hört sich am besten an, wenn man sich stattdessen Slayer reinzieht :D
-
Ok, wie realisiere ich so nen globalen KeyListener?
-
Im Konstruktor des Fensters:
Dann brauchst du noch die Methode, die bei dem event aufgerufen wird - in diesem fall keyTyped()Code :1 2 3 4 5 6 7 8 9 10 11
AWTEventListener ael = new AWTEventListener() { public void eventDispatched( AWTEvent event ) { if(event.getID() == KeyEvent.KEY_TYPED) { keyTyped((KeyEvent)event); } } }; Toolkit.getDefaultToolkit().addAWTEventListener( ael, AWTEvent.KEY_EVENT_MASK);
Code :1 2 3 4
public void keyTyped(KeyEvent k) { //....... }
mfg, MuddinHipHop hört sich am besten an, wenn man sich stattdessen Slayer reinzieht :D
-
mh.. hat ned funktioniert =(
also so wie ich das verstanden hab ist das jetz ein KeyListener der reagiert, egal welches Objekt gerade den Focus hat. Kann es vllt sein dass es daran liegt dass mein Spielfeld ein Canvas ist Die Sache mit dem Focus musst ich noch nie wirklich beachten. Hab ich also noch keine Erfahrung mit. Kann ein Canvas überhaupt den Focus haben?
-
Also , ich habs mal in nem einfachen fenster ausprobiert und der eine geht genauso , wie der andere.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * * Beschreibung * * @version 1.0 vom 07.03.2007 * @author */ public class testframe extends JFrame { // Anfang Variablen // Ende Variablen public testframe(String title) { // Frame-Initialisierung super(title); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); int frameWidth = 300; int frameHeight = 300; setSize(frameWidth, frameHeight); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); int x = (d.width - getSize().width) / 2; int y = (d.height - getSize().height) / 2 ; setLocation(x, y); Panel cp = new Panel(null); add(cp); // Anfang Komponenten this.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent evt){System.out.println(evt); }}); // Ende Komponenten setResizable(false); setVisible(true); } // Anfang Ereignisprozeduren // Ende Ereignisprozeduren }
-
Ok, dann versteh ich nich, warum er bei mir ned will

Ist es eigentlich für den KeyListener von bedeutung, wo die Maus sich grade befindet?
Das wär blöd
weil mein Robot ständig verhindert, dass die Maus das Spielfeld verlässt.
-
Ja , ich musste erst einmal ins Fenster klicken , dammit der auf die Events ansprach.
Weiss nicht ob das von bedeutung ist.
Andere Frage:
Wie krieg ich die Nicht-Standart-Tasten wie z.b. Strg ausgelesen?
-
Guck mal , hast du das schon mal auf diese weise verarbeitet?
/*Wobei k das Ereignissobjekt ist*/Code :1 2
String str = "" + k; if(str.equals("java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar=Eingabe,keyLocation=KEY_LOCATION_UNKNOWN] on panel0"))
wenn am Ende panel0 steht , ist das der Layout-Panel , steht da frame0 , ist das Fenster gemeint und vieleicht musst du da bloss deinen Canvas als canvas0 eintragen
-
Ich hab mir das mit der Tastatur wohl zu einfach vorgestellt....
Da muss man so viel beachten.. ich werde das Menü jetzt wohl einfach über MouseClicked aufrufen
Ich hätt trotzdem gern noch deine icq oder msn adresse =P
Ähnliche Themen
-
KeyListener reagiert teils nicht auf die Leertaste
Von mr12345 im Forum Java GrundlagenAntworten: 6Letzter Beitrag: 20.07.10, 09:42 -
li Listen Problem IE reagiert nicht FF reagiert
Von AdamRiese$ im Forum CSSAntworten: 8Letzter Beitrag: 16.09.08, 12:50 -
KeyListener reagiert nicht!
Von Pichel im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 03.09.08, 14:14 -
KeyListener funktioniert auf Os X nicht
Von vaporizer im Forum JavaAntworten: 2Letzter Beitrag: 16.06.04, 01:24 -
KeyListener bei Window funktioniert nicht
Von vaporizer im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 10.04.04, 16:09





Zitieren
Login





