Krain Geschrieben 8. Oktober 2003 Geschrieben 8. Oktober 2003 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 Zitieren
Jaraz Geschrieben 8. Oktober 2003 Geschrieben 8. Oktober 2003 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 Zitieren
Krain Geschrieben 8. Oktober 2003 Autor Geschrieben 8. Oktober 2003 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? Zitieren
Jaraz Geschrieben 8. Oktober 2003 Geschrieben 8. Oktober 2003 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 Zitieren
Krain Geschrieben 8. Oktober 2003 Autor Geschrieben 8. Oktober 2003 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? Zitieren
Zork Geschrieben 11. Oktober 2003 Geschrieben 11. Oktober 2003 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 Zitieren
Krain Geschrieben 12. Oktober 2003 Autor Geschrieben 12. Oktober 2003 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 Zitieren
Zork Geschrieben 12. Oktober 2003 Geschrieben 12. Oktober 2003 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 Zitieren
Krain Geschrieben 12. Oktober 2003 Autor Geschrieben 12. Oktober 2003 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! Zitieren
Zork Geschrieben 12. Oktober 2003 Geschrieben 12. Oktober 2003 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 Zitieren
Jaraz Geschrieben 12. Oktober 2003 Geschrieben 12. Oktober 2003 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 Zitieren
stevg Geschrieben 14. Oktober 2003 Geschrieben 14. Oktober 2003 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) ? Zitieren
Jaraz Geschrieben 14. Oktober 2003 Geschrieben 14. Oktober 2003 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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.