Keylistener

Status
Nicht offen für weitere Antworten.

Fragender

Bekanntes Mitglied
hallo
ich habe eine ziemlich einfache frage und zwar würde ich gerne mithilfe eines Keylisteners eine gedrückte Taste mit "JOptionPane.showMessageDialog(null,"Hier die Taste")"
ausgeben. Hat jemand ein kurzes beispielprogramm?
Grüße
 

hdi

Top Contributor
Die gedrückte Taste bekommst du über

Java:
KeyEvent#getKeyChar()

Das KeyEvent bekommst du ja in den Listener rein, meistens unter dem Namen "e"
 

Fragender

Bekanntes Mitglied
danke schon mal aber hast du vielleicht noch ein beispieloprogramm?
ich programmiere noch nicht so lang mit java :)
 

hdi

Top Contributor
Hast du denn ein Bsp-Programm? Versuche es doch einfach mal, die API zeigt dir alle Konstruktoren und Methoden für eine Klasse. Wenn du zB nicht mal weisst wie man eine Methode aufruft, solltest du nix mit Listenern machen sondern erstmal die Basics lernen.

Wenn du konkreten Code hast und dort etwas nicht funktioniert, dann helfe ich dir gerne weiter. Aber so nicht mein Freund :D
 

Schandro

Top Contributor
Beispielcode:

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class XXX{

    public static void main(String[] args){
        new XXX();}


    private JFrame window = new JFrame();
    private JPanel panel = new JPanel();

    public XXX(){
        window.setBounds(100,100,400,400);

        window.add(panel);
        JButton button = new JButton("ok");
        panel.add(button);
        button.addKeyListener(myKeyListener);

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                window.setVisible(true);
            }
        });
    }

    KeyListener myKeyListener = new KeyListener(){
        public void keyPressed(KeyEvent event){
            System.out.println(event.getKeyChar()+" pressed!");
        }
        public void keyTyped(KeyEvent event){}
        public void keyReleased(KeyEvent event){}
    };

}
Du solltest aber trotzdem ein entsprechendes Kapitel aus irgendeinen Java-Buch darüber lesen.
 

hdi

Top Contributor
Wofür denn das:

Java:
SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                window.setVisible(true);
            }
});
 
T

Tomate_Salat

Gast
Ich würde das Eher mit einer EventQueue machen

Java:
import java.awt.AWTEvent;
import java.awt.EventQueue;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;



public class KeylistenerThread {
    public static void main(String[] args) {
        JFrame frame = new JFrame("test");
        frame.setBounds(new Rectangle(100,100,100,100));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        
        java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().push(new EventQueue() {
            protected void dispatchEvent(AWTEvent e) {
                if(e instanceof KeyEvent) {
                    if(e.getID() == KeyEvent.KEY_PRESSED) {
                        System.out.println(((KeyEvent) e).getKeyChar());
                        JOptionPane.showMessageDialog(null, "Taste: " + ((KeyEvent) e).getKeyChar() );
                    }
                }
                super.dispatchEvent(e);
            }
        });
    }
}

EDIT:
Wofür denn das:

Java:
SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                window.setVisible(true);
            }
});
Hab zwar noch nicht soviel mit Threads gearbeitet aber wenn nachdem was ich unter SwingUtilities gelesen habe, dient es dazu, das eigentl. Fenster (JFrame) erst dann Sichtbar zu machen, wenn alle vorherigen Prozesse abgeschlossen sind. Das verzögern löst hier das invoakeLater aus
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Eine eigne EventQueue dafür ist ziemlich "schweres Geschütz" - es gibt nur SEHR wenige Fälle, wo das wirklich angebracht ist. Als ... "Reihenfolge" dessen, was sinnvoll ist, könnte man grob(!!!) sagen:
1. KeyListener
2. Wenn es damit nicht geht: KeyBindings
3. Wenn es damit nicht geht: AWTEventListener
4. Wenn es damit nicht geht: EventQueue
Die letzten beiden aber wirklich nur in wenigen Ausnahmefällen...
 

hdi

Top Contributor
@tomate und schandro:
Ich weiss schon, was der EDT ist, aber ich dachte setVisible() ist eine Methode die eh auf dem EDT ausgeführt wird?!
Werden denn nicht alle Standard AWT/Swing Methoden, die eine grafische Änderung hervorrufen, automatisch auf dem EDT ausgeführt?
 

Marco13

Top Contributor
Nein. Sie MÜSSEN auf dem EDT ausgeführt werden, aber das passiert nicht automatisch (siehe Single Thread Rule, Threads and Swing )

Wobei mir das mit dem Bauen des GUI und dem setVisible auch nie wirklich 100% eingeleuchtet hat: Diese Regel greift eigentlich erst für "sichtbare" Components - bei der Aussage, setVisible "müßte" im EDT ausgeführt werden, wird irgendwie definiert, dass nicht die Henne sondern das Ei zuerst da war...

EDIT: BTW: Auf der verlinkten Seite steht, zwar dass das Bauen außerhalb des EDT OK sein KANN, aber man muss ein bißchen Aufpassen...
 
Zuletzt bearbeitet:

Fragender

Bekanntes Mitglied
also bei mir haben der keylistener sowie die EventQueue geklappt. was für nachteile hätte denn eine EventQueue?
 

Marco13

Top Contributor
"Nachteile" - hm ... man macht das schlicht und einfach nicht so. Es ist ein ziemlich low-leveliger Eingriff in die gesamte Eventverarbeitung. Natürlich kannst du zum Postamt gehen, und dort sämtliche Briefe durchsuchen, um zu sehen, ob vielleicht einer für dich dabei ist. Du kannst aber auch warten, bis der Postbote dir deine Briefe in den Briefkasten wirft...
 

André Uhres

Top Contributor
Ich weiss schon, was der EDT ist, aber ich dachte setVisible() ist eine Methode die eh auf dem EDT ausgeführt wird?!
Werden denn nicht alle Standard AWT/Swing Methoden, die eine grafische Änderung hervorrufen, automatisch auf dem EDT ausgeführt?

Einige Swing Komponentenmethoden sind in der API Spezifikation als "thread safe" gekennzeichnet;
solche Methoden können von irgendeinem Thread sicher aufgerufen werden.
Alle anderen Swing Komponentenmethoden müssen vom Event Dispatch Thread aus aufgerufen werden.
Programme, die diese Regel ignorieren, könnten zwar meistens korrekt laufen,
sind aber unvorhersehbaren Fehlern unterworfen, die schwer nachvollziehbar sind.
Lies mehr dazu...


Die main läuft auf dem Initial Thread, die Gui muss aber auf dem Thread
laufen, welcher der graphischen Anzeige gewidmet ist (EventDispatchThread).
Die main muss also die Gui Initialisierung etwa so aufrufen:
Code:
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        createAndShowGUI();
    }
}

In Swing Programmen haben die Initial Threads nicht viel zu tun. Ihre Hauptaufgabe ist
ein Runnable Objekt anzulegen, das die GUI initialisiert, und dieses Objekt zur Ausführung
auf den Event Dispatch Thread zu schicken.
Ein Initial Thread schickt den GUI Initialisierungsantrag auf den Event Dispatch Thread mit dem Aufruf von
javax.swing.SwingUtilities.invokeLater oder javax.swing.SwingUtilities.invokeAndWait.
Lies mehr dazu...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
M KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
N Java Keylistener Java Basics - Anfänger-Themen 2
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
F KeyListener Java Basics - Anfänger-Themen 3
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
J-Gallus Keylistener verstehen Java Basics - Anfänger-Themen 17
S Keylistener Java Basics - Anfänger-Themen 16
S Keylistener im Grafikfenster Java Basics - Anfänger-Themen 3
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
N KeyListener in Thread Java Basics - Anfänger-Themen 0
LexeB4F for schliefe in KeyListener Java Basics - Anfänger-Themen 3
R KeyListener auslagern Java Basics - Anfänger-Themen 3
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
Z KeyListener funktioniert nicht? Weshalb? Java Basics - Anfänger-Themen 8
T KeyListener Java Basics - Anfänger-Themen 2
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
J KeyListener - mal wieder... Java Basics - Anfänger-Themen 2
TheSorm KeyListener Problem Java Basics - Anfänger-Themen 4
M KeyListener Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
L Input/Output Java 3D mit KeyListener Java Basics - Anfänger-Themen 1
S KeyListener reagiert nicht. Java Basics - Anfänger-Themen 4
L KeyListener ohne textfeld Java Basics - Anfänger-Themen 4
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
0 KeyListener ausserhalb der Applikation Java Basics - Anfänger-Themen 5
G KeyListener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
J KeyListener funtioniert nicht! Java Basics - Anfänger-Themen 3
J KeyListener Java Basics - Anfänger-Themen 11
P Input/Output KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
A Input/Output Keylistener Aktiv schalten Java Basics - Anfänger-Themen 8
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S KeyListener Java Basics - Anfänger-Themen 2
A Erste Schritte Problem mit KeyListener Java Basics - Anfänger-Themen 6
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
A Wie KeyListener adden? Java Basics - Anfänger-Themen 15
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
Luk10 KeyListener Java Basics - Anfänger-Themen 13
S KeyListener aus anderer Klasse hinzufügen Java Basics - Anfänger-Themen 19
P KeyListener im Applet Java Basics - Anfänger-Themen 2
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S KeyListener als class? Java Basics - Anfänger-Themen 4
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
P KeyListener Java Basics - Anfänger-Themen 2
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
S KeyListener aktiv auch wenn minimiert? Java Basics - Anfänger-Themen 4
Z Globaler Keylistener Java Basics - Anfänger-Themen 2
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
T canvas killt KeyListener Java Basics - Anfänger-Themen 2
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
D Keylistener zu langsam Java Basics - Anfänger-Themen 7
C Problem mit JPopupMenu, JTextField und Keylistener Java Basics - Anfänger-Themen 2
G Keylistener in einer Schleife Java Basics - Anfänger-Themen 9
M problem mit keylistener Java Basics - Anfänger-Themen 2
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
N KeyListener ohne GUI? Java Basics - Anfänger-Themen 5
M KeyListener Java Basics - Anfänger-Themen 3
T KeyListener wird nicht ausgelöst Java Basics - Anfänger-Themen 6
O KeyListener Java Basics - Anfänger-Themen 8
Developer_X KeyListener ohne JFrame Java Basics - Anfänger-Themen 13
H KeyListener Java Basics - Anfänger-Themen 4
Developer_X KeyListener Actions (hat mit Java3D zu tun) Java Basics - Anfänger-Themen 20
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
Developer_X JFrame soll KeyListener adden Java Basics - Anfänger-Themen 32
hdi KeyListener : keyTyped() nicht nutzbar? Java Basics - Anfänger-Themen 1
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
dl85hej Keylistener Java Basics - Anfänger-Themen 16
H KeyListener will nicht reagieren Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
G Prob. mit KeyListener und Unterklasse Java Basics - Anfänger-Themen 5
G Keylistener nur besimmte Zeichen zulassen Java Basics - Anfänger-Themen 8
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
A KeyListener funktioniert nicht Java Basics - Anfänger-Themen 7
D KeyListener Java Basics - Anfänger-Themen 7
B Keylistener auf JSpinner reagiert nicht? Java Basics - Anfänger-Themen 3
G KeyListener für die Taste "/" Java Basics - Anfänger-Themen 5
E brauche hilfe beim KeyListener Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben