KeyEvents einer JComponent abfangen

MarkusXX0815XX

Grünschnabel
Hallo zusammen,

ich bräuchte mal Rat ... :(
Ich verwende in einer Swing-Oberfläche eine Textkomponente, in der ich für bestimmte KeyEvents (F2 - F12) eine bestimmte Funktionalität ausführen will.
Jetzt habe ich das Problem, dass bestimmte KeyEvents gar nicht vom KeyBinding respektive der dabei zugeordneten Action konsumiert werden, und zwar konkret sind das die Keys F8, F9, F10.
Diese öffnen mir irgendeine Programmoberfläche in meiner Windowsumgebung, anstatt in der zugeordneten Action in der Java-Applikation aufzutauchen.

1. Kann mir da mal jemand den Grund erklären und
2. Wie kann (bzw kann ich überhaupt?) diese Events in meiner Swing-Anwendung konsumieren, bevor sie in die Prärie weitergeleitet werden, und sie ein anderes Programm sieht und entsprechend reagiert?

Danke und Gruß
Markus
 
Ich hab das mal mit folgendem Code getestet:
Code:
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;


public class Program {
	static JLabel label1;
	/**
	 * @param args
	 */
	public static void main(String[] args) {

		JFrame frame1 = new JFrame("Test - Frame");
		frame1.setSize(300, 300);
		frame1.setResizable(false);
		frame1.setLocation(200, 200);
		frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		label1 = new JLabel("Press any Key");
		frame1.add(label1);
		
		frame1.addKeyListener(new KeyAdapter(){

			@Override
			public void keyPressed(KeyEvent e) {

				switch(e.getKeyCode()){
				case 119:
					label1.setText("F8 Pressed");
					break;
					
				case 120:
					label1.setText("F9 Pressed");
					break;
					
				case 121:
					label1.setText("F10 Pressed");
					break;
					
				default:
					label1.setText("Press F8, F9 or F10");
					break;
				}
			}
			
		});
		
		frame1.setVisible(true);
		
	}

}

Habe aber festgestellt, dass nur die F10 Taste Probleme macht(oder das ist jetzt nur bei mir so oO). Normal geht alles wenn ich die F10 Taste 2 mal hintereinander drücke.

warum das so ist, kann ich dir nicht sagen.....und eine lösung hab ich auch nicht....sry.
Ne möglichkeit wäre du benutzt andere Tasten, oder modifier(Shift, ALT....usw). Was besseres fällt mir nicht ein...°.° wobei das mit den Shift und so, das hab ich nicht getestet.

Vielleicht kann jemand anderes helfen.

MfG
Firecloud
 
Hallo Firecloud,

vielen Dank schon mal für Dein Posting und Deine Mühe (incl. Quellcode). Finde ich schon mal super klasse!.
Das mit den Modifiern ist vermutlich eine halbwegs praktikable Lösung für den Anwender.
Aber das eigentliche Problem ist wohl irgendwo in der (recht großen) Anwendung verborgen, so dass da irgendwelche KeyEvents verloren gehen. Die eigentliche Ursache wird vermutlich überdeckt und wird schwer zu finden sein.
Ist aber schon ärgerlich...
Für weitere Tipps, wie man solchen Event-Handling-Problemen auf den Grund geht, bin ich da natürlich immer dankbar :)

Gruß
Markus
 
Zurück