SWT MenuBar & MenuItems Fokus wenn F10 unterdrücken/entfernen

Christopher25

Bekanntes Mitglied
Hallo Zusammen.

Tut mir leid, wegen dieser langen und wirren Überschrift ich hoffe dies ist trozdem im ungefähren was ich möchte.
Also ich arbeite derzeit an einem Kleinen Projekt mit SWT (Standalone ohne RCP).
Habe mir die SWT und JFace Librarys zusammen gesammelt und nun ein normales Java-Projekt erstellt.
Ich habe in meinem Programm eine StyledText Komponente. Dort habe ich einen KeyListener draufgesetzt, welche bei verschiedenen F1 bis F12 Tasten eine bestimmte Aktion ausführen soll.
Das funktioniert alles Prima, nur habe ich den Nebeneffekt (warscheinlich standardmäßig von Windows!?), dass bei der F10 Taste mein erstes Element des MenuItems in den Fokus gerät, was nicht sein soll, da man nach dem F10 direkt weitertippen sollte.
Ich habe schon probiert, den Fokus nach dem F10 tastendruck direkt auf das Textfeld zu setzen, aber anscheinend immer zu früh und der Fokus ging doch an das MenuItem.
Ich weiß leider nicht, ob es ein Listener ist der dort hinter steckt, welcher Standardmäßig im MenuItem oder der MenuBar hinterlegt ist, ich weiß nämlich nicht wie man dort an die Listener dran kommt, weil diese Komponenten keine getter dafür haben soweit ich sehen konnte.
(nur eine getListener(int arg0)), was immer dieser parameter sein soll...

Kann mir jemand dabei Helfen eine Lösung zu finden?
 

Christopher25

Bekanntes Mitglied
Was genau möchtest du denn sehen?
Du kennst doch den Umstand ich kann die höchstens zeigen, wie ich den Listener mache,
was dir sicherlich nicht viel helfen wird.

Java:
textSQL.getComponent().addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent event) {
                // Das SQL-Statement innerhalb des Textfeldes ausführen lassen.
                // Dabei wird geschaut, ob es der ganze Text ist, oder bei einer Selektierung nur diese!
                if (event.keyCode == SWT.F1) {
                    Button buttonExecute = (Button) textSQL.getOptionMap().get("executeSQL");
                    buttonExecute.setSelection(true);
                    buttonExecute.notifyListeners(SWT.Selection, new Event());
                // Das SQL-Textfeld clearen.
                } else if (event.keyCode == SWT.F4) {
                    Button buttonClear = (Button) textSQL.getOptionMap().get("clearSQL");
                    buttonClear.setSelection(true);
                    buttonClear.notifyListeners(SWT.Selection, new Event());
                // Die Tabelle innerhalb des selektierten Tabs wird neu von der Datenbank bezogen und aktualisiert.
                } else if (event.keyCode == SWT.F5) {
                    TableViewer viewer = (TableViewer) tabFolder.getSelection().getData("tableviewer");
                    SQLTable table = (SQLTable) tabFolder.getSelection().getData("table");
                    reloadTable(viewer, table);
                // Alle Tabellen in allen Tabs werden neu von der Datenbank bezogen und aktualisiert.
                } else if (event.keyCode == SWT.F6) {
                    for (CTabItem tab : tabFolder.getItems()) {
                        TableViewer viewer = (TableViewer) tab.getData("tableviewer");
                        SQLTable table = (SQLTable) tab.getData("table");
                        reloadTable(viewer, table);
                    }
                // Einen Tab zurück schalten
                } else if (event.keyCode == SWT.F10) {
                    int itemCount = tabFolder.getItemCount();
                    int index = MainGui.this.tabIndex;
                    // Wenn der index-1 weniger ist als 0, wird auf den letzten Tab geschalten.
                    if (index-1 < 0) {
                        tabIndex = itemCount-1;
                        tabFolder.setSelection(tabIndex);
                    } else {
                        tabFolder.setSelection(--tabIndex);
                    }
              
                // Einen Tab vor schalten
                }  else if (event.keyCode == SWT.F11) {
                    int itemCount = tabFolder.getItemCount();
                    int index = MainGui.this.tabIndex;
                    // Wenn der index+1 mehr ist als itemCount, wird auf den ersten Tab geschalten.
                    if (index+1 >= itemCount) {
                        tabIndex = 0;
                        tabFolder.setSelection(tabIndex);
                    } else {
                        tabFolder.setSelection(++tabIndex);
                    }
                // Zum ersten Tab schalten
                } else if (event.keyCode == SWT.F9) {
                    tabIndex = 0;
                    tabFolder.setSelection(tabIndex);
                // Zum letzten Tab schalten
                } else if (event.keyCode == SWT.F12) {
                    int itemCount = tabFolder.getItemCount();
                    tabIndex = itemCount-1;
                    tabFolder.setSelection(tabIndex);
                }
                super.keyReleased(event);
            }
        });

Der textSQL ist eine Wrapper Klasse, welche mit getComponent das StyledText zurückliefert.
Wie gesagt, es funktioniert ja alles wie es sein soll. Die Sache ist nur, dass ich beim drücken von F10 jedes mal den Fokus auf die MenuBar bekomme.
Das ist aber in jedem Programm so. Wenn ihr das z.b. hier im Browser mal probiert, ist es das Gleiche. Aber das muss man doch irgendwie unterbinden/umgehen können oder? Und selbst wenn es nur ein unschöner Workaround ist...
 
Zuletzt bearbeitet:

JStein52

Top Contributor
Ich habe mal das gefunden, weiss aber nicht ob es hilft:

I had the same problem for many months, until I found adding the line below was able to fix it:

menu_bar.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F10"), "none");

Where the `menu_bar` is the reference for your JMenuBar component, and "none" removes the previous action. If this ain`t enough, add 2 more lines, each the same as above, but with the conditions JComponent.WHEN_FOCUSED and JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT. This may be enough.
 

Christopher25

Bekanntes Mitglied
Nein leider habe ich das auch gefunden.
Ich komm ja leider nicht wirklich an die Listener dran.
Wenn ich das könnte, könnte ich schauen, was es dort bereits für Listener gibt, aber pustekuchen^^
Man bekommt nur welche, wenn man genau weiß, welchen man haben will.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
emma_louisa JavaFX MenuBar Zweitfenster; bei Button "Abbrechen" nur das Zweitfenster schließen AWT, Swing, JavaFX & SWT 2
S JavaFX MenuItem in hoher (height größer) MenuBar vertikal zentrieren AWT, Swing, JavaFX & SWT 4
M JavaFX MenuBar und Camera zusammen verwenden AWT, Swing, JavaFX & SWT 2
D Apple MenuBar Eintrag "java" AWT, Swing, JavaFX & SWT 15
B Doppelte MenuBar -> Nach Minimieren verschwunden AWT, Swing, JavaFX & SWT 3
E JavaFX MenuBar und ToolBar zu einem Bereich AWT, Swing, JavaFX & SWT 3
Z JavaFX Inhalt einer ViewTable durch Aktion einer Menubar ändern welche in einer anderen fxml ist AWT, Swing, JavaFX & SWT 4
O MenuBar wird nicht angezeigt AWT, Swing, JavaFX & SWT 0
C Swing MenuBar als eigene Klasse AWT, Swing, JavaFX & SWT 4
A JavaFX Menubar wird von Canvas überzeichnet AWT, Swing, JavaFX & SWT 8
C Swing Menubar Close, Minimize, Maximize button AWT, Swing, JavaFX & SWT 7
H Timer/Stoppuhr in MenuBar anzeigen AWT, Swing, JavaFX & SWT 4
S MenuBar ActionListener Event ... AWT, Swing, JavaFX & SWT 6
F Swing MenuBar wird verdeckt AWT, Swing, JavaFX & SWT 2
S Vereinen von zwei MenuBar AWT, Swing, JavaFX & SWT 3
P jMenu ohne Menubar - Jigloo zeigts AWT, Swing, JavaFX & SWT 2
G MenuBar selectieren AWT, Swing, JavaFX & SWT 9
C menubar border AWT, Swing, JavaFX & SWT 2
R Menubar wird auf Mac OS X nicht angezeigt AWT, Swing, JavaFX & SWT 5
M CoolBar, MenuBar und StatusLine aktualisieren AWT, Swing, JavaFX & SWT 2
T Menubar Problem AWT, Swing, JavaFX & SWT 2
R Menubar immer updaten! AWT, Swing, JavaFX & SWT 9
P MenuBar über Canvas AWT, Swing, JavaFX & SWT 2
T Shortcut für Eintrag aus MenuBar AWT, Swing, JavaFX & SWT 3
M icons im menubar ? AWT, Swing, JavaFX & SWT 5
G Anordnung MenuItems nachträglich ändern AWT, Swing, JavaFX & SWT 2
M KeyEvent ohne Fokus konsumieren AWT, Swing, JavaFX & SWT 1
H Swing Wie Fokus von JTextField entfernen? AWT, Swing, JavaFX & SWT 9
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
M JavaFX Absoluter Fokus während drag Event AWT, Swing, JavaFX & SWT 10
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
B Swing Fokus auf JPanel setzen AWT, Swing, JavaFX & SWT 2
J Swing Fokus JInternalFrame fehlerhaft AWT, Swing, JavaFX & SWT 4
B Fokus markierung entfernen AWT, Swing, JavaFX & SWT 2
C AWT Fokus von Component entfernen, wenn kein anderes vorhanden AWT, Swing, JavaFX & SWT 4
A Vordergrund und Fokus setzten oder Modales Einabefeld AWT, Swing, JavaFX & SWT 28
G SWT Fokus auf MsgBox setzen AWT, Swing, JavaFX & SWT 3
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
A Fokus wieder in ein JTextField setzen AWT, Swing, JavaFX & SWT 4
N Filternde Combobox in JTable verliert Fokus nach erster Eingabe AWT, Swing, JavaFX & SWT 2
J Swing Wie Fokus richtig setzen? AWT, Swing, JavaFX & SWT 7
T Swing Fokus AWT, Swing, JavaFX & SWT 2
I Swing Wie bekomme ich den Fokus für einen JPanel AWT, Swing, JavaFX & SWT 5
H Swing Problem mit FocusCycleRoot, der FocusTraversalPolicy und dem Fokus AWT, Swing, JavaFX & SWT 2
G Problem beim setzen des Fokus AWT, Swing, JavaFX & SWT 4
E Swing Mit rechter Maustaste Fokus in JList setzen?! AWT, Swing, JavaFX & SWT 3
F Rechte Maustaste auf TreeNode soll den Fokus auf diese setzen AWT, Swing, JavaFX & SWT 6
agent47 Swing auf Schnelltaste ohne Fokus hören AWT, Swing, JavaFX & SWT 2
M JSpinner als TableCellEditor; buttons nur bei fokus sichtbar AWT, Swing, JavaFX & SWT 14
Z Fokus auf Eingabefeld bei showMessageDialog setzen AWT, Swing, JavaFX & SWT 3
N Herkunft des Fokus erkennbar (via Klick oder Tab-Steuerung)? AWT, Swing, JavaFX & SWT 4
F Panel kann nicht Fokus erhalten AWT, Swing, JavaFX & SWT 2
N Textfeld füllen sobald es den Fokus verliert AWT, Swing, JavaFX & SWT 2
D JTable, Model, Fokus AWT, Swing, JavaFX & SWT 3
multiholle AWT Hotkey ohne Fokus AWT, Swing, JavaFX & SWT 6
W JTextArea/TextArea kriegt keinen Fokus AWT, Swing, JavaFX & SWT 6
T Fokus auf CB in Table mit beliebiger Taste AWT, Swing, JavaFX & SWT 12
G JOptionPane.showInputDialog(): Texteingabe und Fokus AWT, Swing, JavaFX & SWT 3
V Kein Fokus für Key Bindings auf JPanel bzw JApplet AWT, Swing, JavaFX & SWT 2
R Fokus von GUI-Elementen AWT, Swing, JavaFX & SWT 3
F Herausfinden, auf welchem Objekt der Fokus liegt AWT, Swing, JavaFX & SWT 2
V JTable verliert Fokus, wie offene Zelle schliessen? AWT, Swing, JavaFX & SWT 5
S Eventhandling obwohl Fenster nicht im Fokus AWT, Swing, JavaFX & SWT 5
GilbertGrape bei "Enter" Funktion ausführen, egal wo der Fokus AWT, Swing, JavaFX & SWT 2
A Fokus in ein Textfeld setzen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A ComboBox soll reagieren ohne fokus AWT, Swing, JavaFX & SWT 7
C Probleme einem JPanel den Fokus zuzuweisen AWT, Swing, JavaFX & SWT 2
A Fokus und JTextField AWT, Swing, JavaFX & SWT 35
T JList mit eigenem TransferHandler: Fokus(?)-Probleme AWT, Swing, JavaFX & SWT 4
D JButton mit Fokus soll auf ENTER reagieren AWT, Swing, JavaFX & SWT 3
M Frame erhält ungewollt den Fokus AWT, Swing, JavaFX & SWT 10
V JTable Handling Fokus on Keystroke und Maus Doubleclick AWT, Swing, JavaFX & SWT 9
S JTextArea mit Scrollbar,append Text mit Fokus? AWT, Swing, JavaFX & SWT 5
G Event, wenn JTextField Fokus verliert? AWT, Swing, JavaFX & SWT 2
C Der hartnäckige Fokus AWT, Swing, JavaFX & SWT 3
G Keylistener/Fokus Problem AWT, Swing, JavaFX & SWT 3
B Fokus Problem unter Linux AWT, Swing, JavaFX & SWT 7
J JFrame und Fokus AWT, Swing, JavaFX & SWT 4
N Fokus Reihenfolge ändern AWT, Swing, JavaFX & SWT 12
M Fokus auf ein JTextfield in einem JDialog setzen AWT, Swing, JavaFX & SWT 6
I fokus AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben