Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Probleme mit Window und Keylistener

Empfohlene Antworten

Veröffentlicht

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

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

  • 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?

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

  • 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?

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

  • 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

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

  • 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!

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

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

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) ?

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.