Veröffentlicht 8. Oktober 200321 j Hallo Ich hab folgendes Programm abgeschrieben und wollte es so modifizieren, dass es in einem Window (-später vielleicht JWindow) läuft und mit der ESC-Taste verlassen werden kann. public class HelloJava3Da extends Window implements KeyListener { public HelloJava3Da() { super(new Frame()); addKeyListener(this); setLayout(new BorderLayout()); Canvas3D c3d = new Canvas3D(null); c3d.addKeyListener(this); add("Center",c3d); setSize(256,256); BranchGroup scene = createSceneGraph(); scene.compile(); SimpleUniverse simpleU = new SimpleUniverse(c3d); simpleU.getViewingPlatform().setNominalViewingTransform(); simpleU.addBranchGraph(scene); show(); } public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); objRoot.addChild(new ColorCube(0.4)); return objRoot; } public static void main(String[] args) { new HelloJava3Da(); } public void keyTyped(KeyEvent e) { System.out.println("Hallo"); } public void keyPressed(KeyEvent e) { System.out.println("Hallo"); } public void keyReleased(KeyEvent e) { System.out.println("Hallo"); } } Kann mir jemand verraten, was ich falsch mache? - Ich versuche das jetzt seit 3 Stunden und komm aber nicht dahinter, warum er mir nicht Hallo ausgibt, wenn ich im Window ne Taste drücke? vielen dank im Voraus
8. Oktober 200321 j Hi, Frame verarbeitet KeyEvents, Window nicht. Window ist eine sehr rudimentäre Klasse, von der eigentlich nicht abgeleitet werden sollte. Dafür gibt es ja Frame. Frame ist übrigens von Window abgeleitet. Gruß Jaraz
8. Oktober 200321 j Autor Wie bekomm ich dann am einfachsten ein Fenster ohne Rahmen oder ähnliches, das auf Mouse bzw. KeyEvents reagiert? Kann ich ein Panel drauf legen, welches auf ein KeyEvent reagiert?
8. Oktober 200321 j Hm, schwierig. Wenn es nur um die Escape Taste geht, könntest du dir bei Frame anschauen wie SUN den KeyListener implementiert hat und dein Window dementsprechend erweitern. Ansonsten wüßte ich keine Möglichkeit. Vielleicht noch mit Toolkit.getDefaultToolkit().getScreenSize() den Screensize holen und alles überlagern? Gruß Jaraz
8. Oktober 200321 j Autor Ok - danke Muss ich mich wohl damit abfinden - werde wohl doch erstmal einen Frame benutzen. Kann das sein, dass das mal in früheren Versionen funktioniert hat? Weil im GoTo Java von Guido Krüger glaube ich, war so ein Beispiel mit dabei. Hab es eben bei mir ausprobiert - funktioniert aber komischerweise auch nicht. Weißt du da was genaueres?
11. Oktober 200321 j Huhu dein Problem ist einfach zu lösen... Baue im Classen-Constructor einfach die folgenden paar Zeilen ein... addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { // Wenn ESC gedrückt wurde reagieren if(evt.getKeyCode() == evt.VK_ESCAPE) { System.out.println("ESC gedrückt"); } } }); Du musst natürlich die gewünschte Action einbauen.. Meine Version gibt nur nen String auf StdErr aus... cheers, Zork
12. Oktober 200321 j Autor Genau das funktioniert ja nicht! Zumindest in der 1.4-er Java Version! Das hab ich doch versucht. Ich bin aber auch der Meinung, dass es in früheren Versionen funktioniert hat! trotzdem danke
12. Oktober 200321 j Hm also Du machst was falsch.... Hier mein Beispiel mal als komplettes Programm... Läuft problemlos mit SDK 1.4.2 public class bla extends javax.swing.JFrame { public bla() { initComponents(); setSize(300, 300); } private void initComponents() { addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { // Wenn ESC gedrückt wurde reagieren if(evt.getKeyCode() == evt.VK_ESCAPE) { System.out.println("ESC gedrueckt"); } } }); pack(); } private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } public static void main(String args[]) { new bla().show(); } } cheers, Zork
12. Oktober 200321 j Autor Moment mal - das ist aber ein JFrame! Ich wollte ein JWindow oder ein Window haben. Dass es bei einem Frame bzw. JFrame funktioniert weiß ich ja, ich hätte es aber gerne für ein Window oder JWindow!
12. Oktober 200321 j Sodele.... ich habe mich mal schlau gemacht.... java.sun.com. Es ist nicht möglich einem Window oder JWindow einen KeyEvent verarbeiten zu lassen! JFrame oder JInternalFrame können das. Sprich Du musst Dein Proggi darauf umstellen. cheers, Zork
12. Oktober 200321 j Original geschrieben von Krain Kann das sein, dass das mal in früheren Versionen funktioniert hat? Weil im GoTo Java von Guido Krüger glaube ich, war so ein Beispiel mit dabei. Hm, ich habe nur die aktuelle Version und da habe ich KeyListener nur mit JFrames gesehen. Original geschrieben von Zork Sodele.... ich habe mich mal schlau gemacht.... java.sun.com. Es ist nicht möglich einem Window oder JWindow einen KeyEvent verarbeiten zu lassen! JFrame oder JInternalFrame können das. Sprich Du musst Dein Proggi darauf umstellen. Die Erkenntnis besteht schon seit dem 2.ten Beitrag in diesem Thread. Das nächste mal vielleicht nicht nur die Frage lesen. Gruß Jaraz
14. Oktober 200321 j Original geschrieben von Jaraz Hi, Frame verarbeitet KeyEvents, Window nicht. Window ist eine sehr rudimentäre Klasse, ... Gruß Jaraz kannst du das mal erläutern, denn Window erbt ja von java.awt.Component die methode addKeyListener(KeyListener l) ?
14. Oktober 200321 j Original geschrieben von stevg kannst du das mal erläutern, denn Window erbt ja von java.awt.Component die methode addKeyListener(KeyListener l) ? Ja, aber der KeyListener ist mit dem Focus gekoppelt und das Focusmanagent funktioniert nur im Frame halbwegs. Man könnte für einen Splash Screen übrigens auch Frame.setUndecorated(true) oder so ähnlich nehmen. ungetested!!! Gruß Jaraz
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.