java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > AWT, Swing, JavaFX & SWT

AWT, Swing, JavaFX & SWT Themen zur Programmierung von Benutzer-Oberflächen (GUI, Applet) sowie zur Grafikprogrammierung (2D / 3D)

Antwort     Ist dieses Thema erledigt?
Themen-Optionen Thema durchsuchen Ansicht
Alt 17.03.2010, 10:30   #1 (permalink)
Benutzer
int
 
Registriert seit: 22.12.2009
Fachbeiträge: 61
Abgegebene Danke: 22
Erhielt 0 Danke für 0 Beiträge
Standard KeyListener Funktionstasten Problem

Hallo Community,

ich hänge jetzt an einem Problem, wo ich wirklich nicht mehr weiter weiß. Ich habe sehr viel dazu gegoogled, konnte jedoch keine passende Antwort finden. Dass ich noch Anfänger mit SWT und Objektorientierung bin, erschwert die ganze Sache.

Ich hab ein kleines Eclipse Plugin geschrieben, ein Taschenrechner um genau zu sein. Alles funktioniert soweit auch, dh. Button und Display erstellt, alle gängigen Operationen, Mauseingabe über Button funktionert und über Tastatur auch. Ich wollte nun noch einen Schritt weiter gehen und Copy & Paste hinzufügen, allerdings scheitere ich an den Funktionstasten.

Das Problem bestand auch schon bei "Enter", wenn der Focus auf einem Button liegt. Das konnte ich aber mit einem FocusListener umgehen, indem immer das Label (entspricht dem Display) den Focus hat. Da wird dann komischerweise "Enter" nicht als Funktionstaste, sondern als normale Taste betrachtet und das Programm springt in das KeyEvent.

Allerdings ist es für mich nicht möglich, CTRL + C / V abzufangen, weil er nicht in das KeyEvent geht. Ich poste mal den Auszug aus meinem Code:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
KeyListener hitKey = new KeyListener(){
            public void keyReleased(KeyEvent e){
                if (e.keyCode == SWT.CTRL){
                    System.out.println("strg released");
                    strg = false;
                }
            }
            public void keyPressed(KeyEvent e){
                
                String key = Character.toString(e.character);
                String alt = display.getText();
                
                if (e.keyCode == SWT.CTRL){
                    System.out.println("strg set");
                    strg = true;
                }
                if (key.equals("c")){
                    System.out.println("c set");
                }
                if (key.equals("c") & strg){
                    System.out.println("Tastenkombi");
                }

Drücke ich CTRL, gibt er mir "strg set" aus. Drücke ich dazu noch C und lasse es wieder los, passiert nichts. Lasse ich dann CTRL los, gibt es mir "strg released" aus.

Nun, zum Testen hab ich den Teil nochmal umgeschrieben:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
KeyListener hitKey = new KeyListener(){
            public void keyReleased(KeyEvent e){
                if (Character.toString(e.character).equals("x")){
                    System.out.println("x released");
                    strg = false;
                }
            }
            public void keyPressed(KeyEvent e){
                
                String key = Character.toString(e.character);
                String alt = display.getText();
                
                if (key.equals("x")){
                    System.out.println("x set");
                    strg = true;
                }
                if (key.equals("c") & strg){
                    System.out.println("Tastenkombi");
                    strg = false;
                }

Hier funktioniert alles, wie gewünscht.

Gibt es eine Möglichkeit, das Problem mit der Funktionstaste zu umgehen? Oder wie würdet ihr die Sache lösen? Über jede Hilfe wäre ich sehr dankbar!

Viele Grüße,
Ralle


Edit Lösung:

Problem gelöst, am Ende hat Google doch noch was brauchbares ausgespuckt.

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
//CTRL + V
                if (e.stateMask == SWT.CTRL & e.keyCode == 118){}
 
//CTRL + C 
                if (e.stateMask == SWT.CTRL & e.keyCode == 99){}

stateMask war das Zauberwort. Vielleicht hilft es ja jemandem, der das selbe Problem hat!

Geändert von v Ralle v (17.03.2010 um 11:45 Uhr)
v Ralle v ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort     Ist dieses Thema erledigt?

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit JPopupMenu, JTextField und Keylistener chris84x Java Basics - Anfänger-Themen 2 08.03.2010 17:29
KeyListener Problem AWT, Swing, JavaFX & SWT 4 13.12.2007 21:30
Tasten mit Umlauten im KeyListener verhalten sich seltsam sparrow AWT, Swing, JavaFX & SWT 4 21.02.2006 11:35
Applet / keyListener an Textfield oder Label Nazgul666 Deployment 1 13.10.2005 12:10
GlassPane KeyListener Problem mr2000 Chat - NoPaste 3 29.08.2004 20:21


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de