Keylistener, Taste überprüfen

Status
Nicht offen für weitere Antworten.

Djinndrache

Bekanntes Mitglied
Hallo,

ich möchte gerne prüfen, ob STRG + ENTER gedrückt ist.


Hier ein kleiner Codeschnipsel, mit dem ich ENTER überprüfe:

Code:
		inputAnswer.addKeyListener(new KeyListener() {
			public void keyPressed(KeyEvent e) {
	
			}

			public void keyReleased(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_ENTER) {
					System.out.println("test");
				}
			}

			public void keyTyped(KeyEvent e) {
			}
		});

Das klappt auch soweit. Nur krieg ich es nicht hin, gleichzeitig auch noch auf STRG zu prüfen. Wenn ich einfach mit einem logischen && die STRG-Taste prüfe passiert nichts - geht nicht.


Wäre dankbar für Hilfe :)
 

Wildcard

Top Contributor
Mit Bindings kapselt du alles objektorientiert in wiederverwendbaren Actions, ausserdem bist du nicht auf die Position des Eingabe Fokus angewiesen.
 

FArt

Top Contributor
S

SlaterB

Gast
ein KeyListener ist in gleicher Weise wiederverwendbar
und ob man den Focus haben will oder nicht ist doch eine Sache, über die man nachdenken darf
 

Wildcard

Top Contributor
SlaterB hat gesagt.:
ein KeyListener ist in gleicher Weise wiederverwendbar
und ob man den Focus haben will oder nicht ist doch eine Sache, über die man nachdenken darf
Anders gefragt: welchen Vorteil siehst du im KeyListener?
 

byte

Top Contributor
Ich würde auch immer Actions und Key Bindings (bzw. Mnemonics) bevorzugen.

An alternative to key bindings is using key listeners. Key listeners have their place as a low-level interface to keyboard input, but for responding to individual keys key bindings are more appropriate and tend to result in more easily maintained code. Key listeners are also difficult if the key binding is to be active when the component doesn't have focus. Some of the advantages of key bindings are they're somewhat self documenting, take the containment hierarchy into account, encourage reusable chunks of code (Action objects), and allow actions to be easily removed, customized, or shared. Also, they make it easy to change the key to which an action is bound. Another advantage of Actions is that they have an enabled state which provides an easy way to disable the action without having to track which component it is attached to.
 
S

SlaterB

Gast
Wildcard hat gesagt.:
Anders gefragt: welchen Vorteil siehst du im KeyListener?
Vorteil gegenüber was?
gegenüber nix: man kann auf Keys reagieren

gegenüber Bindings:
- natürliches Verhalten, nur Events bei Focus, bei TextFeldern von Sondertasten abgesehen nur Events wenn Buchstabe auch im Textfeld erscheinen würde
- analoges verständliches Konzept zu MouseListener(!)/ ActionListener/ sonstige Listener,
- einfache Bearbeitung von Buchstabengruppen/ gesamte Tastatureingaben/ Modifern
 

Wildcard

Top Contributor
Bei KeyBindings bestimmst du selbst ob die Komponente fokusiert sein muss, irgendeine Komponente im gleichen Fenster, oder die Komponente ein Parent der fokussierten Komponente sein muss.
Man hat also mehr Funktionalität und Flexibilität während der Code IMO besser lesbar ist als bei KeyListenern.
Daher auch die Empfehlung von Sun selbst sie wo immer möglich den KeyListenern vorzuziehen.

Sträubst du dich jetzt dagegen, weil ich es gesagt habe, oder weil du es bisher anders machst?
Denn einen objektiven Grund gibt es eigentlich nicht :bahnhof:
 
S

SlaterB

Gast
> Bei KeyBindings bestimmst du selbst ob die Komponente fokusiert sein muss [..]

das ist ja auch eine tolle Sache, aber wenn man zwei Strings mit equals vergleichen oder mit Comparable sortieren kann,
schreibt man ja auch nicht einen riesigen Comparator-Komplex ;)

> Man hat also mehr Funktionalität und Flexibilität während der Code IMO besser lesbar ist als bei KeyListenern.

zur Funktionaltät nochmal das gleiche Spiel: Vergleich BigInteger vs int ;)

Lesbarkeit kann natürlich jeder sehen wie es ist,
die Analogie zu Mouse- und sonstigen Listenern habe ich ja extra als Vorteil aufgezählt, da dürfte meine Sicht klar sein

> Daher auch die Empfehlung von Sun selbst sie wo immer möglich den KeyListenern vorzuziehen.

tja, aber deprecated sind die KeyListener aber nun noch lange nicht,

hier
http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html
steht z.B.
> Note: To define special reactions to particular keys, use key bindings instead of a key listener. For further information, see How to Use Key Bindings.

und da muss ich auch zustimmem: für eine bestimmte Taste(n-Kombination) hat das KeyBinding-System mit Mapping Key -> Aktion natürlich einen ganz besonderen Reiz


> Sträubst du dich jetzt dagegen, weil ich es gesagt habe, oder weil du es bisher anders machst?

zunächst mal sträube ich mich immer gegen unbegründete Aussagen 'so ist es schlecht',
noch schlimmer mit Verweisen 'hier wird es so empfohlen', ohne einen echten Grund anzugeben,
das klingt immer bös von oben herab, da widerspreche ich schon aus Prinzip

ich selber verwende beides nicht

> Denn einen objektiven Grund gibt es eigentlich nicht

solange es keinen objektiven Grund für KeyBinding gibt, wäre das ja theoretisch kein Problem,
wobei ich meine, drei objektive aufgezählt zu haben
 

byte

Top Contributor
- wobei ich meine, drei objektive aufgezählt zu haben

Naja, Punkt 1 und 3 sind falsch und Punkt 2 ("KeyListener analog zu MouseListener"), warum ist das in Deinen Augen ein Vorteil? Weil Newbies dann schneller durchblicken? :bahnhof:
 

tfa

Top Contributor
SlaterB hat gesagt.:
zunächst mal sträube ich mich immer gegen unbegründete Aussagen 'so ist es schlecht',
noch schlimmer mit Verweisen 'hier wird es so empfohlen', ohne einen echten Grund anzugeben,
das klingt immer bös von oben herab, da widerspreche ich schon aus Prinzip
Die Begründung warum bzw. wann Bindings statt Listener steht doch in dem von Wildcard angegebenen Link. Man muss es einfach nur lesen. Im Übrigen finde ich solche Ratschläge absolut nicht "von oben herab" sondern ziemlich wertvoll, wenn man seine Kenntnisse weiter entwickeln will. Man möchte doch z.B. nicht ewig mit Singletons als Globale-Variable-Ersatz oder Access-"Datenbanken" herumkrepeln, oder? Warum sollten Newbies es nicht gleich richtig machen?
 
S

SlaterB

Gast
byto hat gesagt.:
Naja, Punkt 1 und 3 sind falsch
inwiefern?
und Punkt 2 ("KeyListener analog zu MouseListener"), warum ist das in Deinen Augen ein Vorteil? Weil Newbies dann schneller durchblicken? :bahnhof:
Listener ist ein zentrales Konzept in Swing, einer der grundlegendsten Fachbegriffe

'Writing Event Listeners' ist z.B. einer der 10 Hauptpunkte im Swing-Tutorial,
während KeyBindings unter 'Using Other Swing Features' versteckt ist

dass man ein Event bekommt 'Buchstabe x wurde gedrückt' ist genau das,
was man in so einer Situation als einfaches Event haben möchte,
ist 'der natürliche Weg'

----------

tfa hat gesagt.:
Die Begründung warum bzw. wann Bindings statt Listener steht doch in dem von Wildcard angegebenen Link. Man muss es einfach nur lesen.
hmm, stimmt,
dass dort im Detail der Vergleich zu KeyListener steht hatte ich nicht bedacht

siehe auch Nachfrage von Djinndrache
> Wieso?

+ Antwort

> Mit Bindings kapselt du alles objektorientiert in wiederverwendbaren Actions, ausserdem bist du nicht auf die Position des Eingabe Fokus angewiesen.

auf diesen Satz als einzige Begründung hatte ich geantwortet, nicht auf den angegebenen Link

----------

und nicht dass es falsch verstanden wird:
ich sage nicht, dass eines der beiden Konzepte besser als das andere ist,
aber wenn der arme KeyListener ohne Not niedergemacht wird, dann verteidige ich ihn ;)


--------

tfa hat gesagt.:
Im Übrigen finde ich solche Ratschläge absolut nicht "von oben herab" sondern ziemlich wertvoll, wenn man seine Kenntnisse weiter entwickeln will. Man möchte doch z.B. nicht ewig mit Singletons als Globale-Variable-Ersatz oder Access-"Datenbanken" herumkrepeln, oder? Warum sollten Newbies es nicht gleich richtig machen?

das ist wieder eine Ansichtssache,
wenn jemand mit Mühe eine Liste per for-Schleife durchläuft,
dann finde ich einen dezenten Hinweis auf Collections.contains() hilfreich,
aber es hat auch seinen Sinn, das mal selber gemacht zu haben,

und 'das Rad neu erfinden/ eine Liste manuell zu durchlaufen ist wenn möglich zu vermeiden, verwende [High Level API xy]'
fände ich wieder sehr unangebracht, besonders wenns noch sowas exotisches wie JCommons ist
 

byte

Top Contributor
> wenn jemand mit Mühe eine Liste per for-Schleife durchläuft,
> dann finde ich einen dezenten Hinweis auf Collections.contains() hilfreich,
> aber es hat auch seinen Sinn, das mal selber gemacht zu haben,

Jo. Aber wenn er nicht weiss, wie es "richtig" geht, dann wird er es auch in Zukunft nicht schön machen. Es ist doch auch der Sinn dieses Forums, Verbesserungsvorschläge zu machen. ???:L
 

Djinndrache

Bekanntes Mitglied
Okay, dann mal konkret für meinen Fall:

Wenn ich im Textfeld Fokus habe soll ENTER ein Zeilenumbruch sein (normal). STRG+Enter soll das Formular allerdings "Absenden", aber auch nur im Fokus des Textfelds.

Jetzt ihr Profis: Machen in diesem Fall Key Bindings mehr Sinn als mein toller Listener? ;)
 
S

SlaterB

Gast
da du nur auf eine einzelne Taste reagierst ist KeyBindings die logische Wahl
 

Djinndrache

Bekanntes Mitglied
SlaterB hat gesagt.:
da du nur auf eine einzelne Taste reagierst ist KeyBindings die logische Wahl

Gibts ein besseres Tutorial für KeyBindings, als das komische vorhin? Das ist mir zu hoch ;)

Ein Beispielcode würde mir reichen, daraus kann man bestimmt entnehmen wie das geht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D KeyListener-Problem nach dem "Gedrückthalten" einer Taste AWT, Swing, JavaFX & SWT 10
L AWT KeyListener, Taste gedrückt halten AWT, Swing, JavaFX & SWT 12
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
B Swing KeyListener auf Container? AWT, Swing, JavaFX & SWT 1
T Event Handling KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
A Event Handling Muss ich 'KeyListener' tasuend mal zufügen? AWT, Swing, JavaFX & SWT 7
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
S Keylistener reagiert bei Buttons nicht. AWT, Swing, JavaFX & SWT 8
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
X KeyListener AWT, Swing, JavaFX & SWT 0
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
N KeyListener funktioniert nicht richitg AWT, Swing, JavaFX & SWT 4
Z SnakeGame Schlange per KeyListener bewegen! AWT, Swing, JavaFX & SWT 10
T KeyListener AWT, Swing, JavaFX & SWT 2
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9
7 KeyListener tastatur temporär blockieren AWT, Swing, JavaFX & SWT 7
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
U Mouse + Keylistener AWT, Swing, JavaFX & SWT 12
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
J JWindow und keylistener AWT, Swing, JavaFX & SWT 1
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
A Swing KeyEvent mit KeyListener und KeyAdapter kürzer schreiben AWT, Swing, JavaFX & SWT 7
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
C KeyListener AWT, Swing, JavaFX & SWT 5
Doopy Event Handling KeyListener funktioniert nach Restart nicht mehr AWT, Swing, JavaFX & SWT 7
S KeyListener geht nicht AWT, Swing, JavaFX & SWT 12
C Swing KeyListener in JPanel AWT, Swing, JavaFX & SWT 2
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
C JTextField KeyListener AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
E Swing KeyListener implementieren AWT, Swing, JavaFX & SWT 12
P KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 11
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
T KeyListener AWT, Swing, JavaFX & SWT 4
R KeyListener in JWindow AWT, Swing, JavaFX & SWT 7
T BlueJ KeyListener AWT, Swing, JavaFX & SWT 7
Z KeyListener AWT, Swing, JavaFX & SWT 2
M Swing KeyListener in JTextfield AWT, Swing, JavaFX & SWT 4
C Swing KeyListener für JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 8
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
A Keylistener reagiert nicht AWT, Swing, JavaFX & SWT 10
D Problem mit KeyListener AWT, Swing, JavaFX & SWT 2
J KeyListener um auf CTRL-Enter zu reagieren AWT, Swing, JavaFX & SWT 2
L Snake in Java KeyListener Problem AWT, Swing, JavaFX & SWT 30
B "globaler" KeyListener? AWT, Swing, JavaFX & SWT 3
B JTable TableHeader KeyListener AWT, Swing, JavaFX & SWT 4
S Swing KeyListener und JList AWT, Swing, JavaFX & SWT 2
R KeyListener funzt nicht AWT, Swing, JavaFX & SWT 2
X KeyListener AWT, Swing, JavaFX & SWT 4
P KeyListener + Animation AWT, Swing, JavaFX & SWT 2
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
V Problem mit KeyListener im Fullscreen-Modus AWT, Swing, JavaFX & SWT 2
M AWT KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
C Swing KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 7
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
F Tastenabfrage (KeyListener) AWT, Swing, JavaFX & SWT 2
D KeyListener Problem bei JPanel wechsel AWT, Swing, JavaFX & SWT 2
S Swing JTree mit KeyListener AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, requestFocus und KeyBindings AWT, Swing, JavaFX & SWT 8
E JFrame akzeptiert den KeyListener nicht AWT, Swing, JavaFX & SWT 3
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Swing KeyListener hört nur manchmal zu AWT, Swing, JavaFX & SWT 2
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
earlgrey_tea AWT KeyListener bekommt keine Signale AWT, Swing, JavaFX & SWT 3
L Problem mit KeyListener AWT, Swing, JavaFX & SWT 3
A KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 4
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
B KeyListener Strg+s AWT, Swing, JavaFX & SWT 5
D Globaler Keylistener AWT, Swing, JavaFX & SWT 4
M problem mit keylistener/textarea AWT, Swing, JavaFX & SWT 6
M KeyListener Problem unter Firefox AWT, Swing, JavaFX & SWT 2
M Komisches Verhalten: JCombobox mit KeyListener AWT, Swing, JavaFX & SWT 13
capgeti SWT KeyListener 2 Tasten Problem AWT, Swing, JavaFX & SWT 3
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
Developer_X AWT KeyListener wird nicht ausgeführt! AWT, Swing, JavaFX & SWT 3
N JFrame und KeyListener AWT, Swing, JavaFX & SWT 6
M KeyListener reagiert nach Buttondruck nicht mehr AWT, Swing, JavaFX & SWT 4
A AWT Button verhindert ausführung vom Keylistener AWT, Swing, JavaFX & SWT 4
R KeyListener hinzufügen AWT, Swing, JavaFX & SWT 7
T Swing KeyListener mit mehreren Objekten AWT, Swing, JavaFX & SWT 2
G KeyListener AWT, Swing, JavaFX & SWT 3
E KeyListener AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben