Hallo,
eigentlich klingt es einfach, aber irgendwie beiße ich mir die Zähne aus: Ich möchte eine Applikation undecorated und auf Bildschirmgröße darstellen, sodass nur die Applikation zu sehen ist. Bei einer bestimmten Tastenkombination soll ein Menü eingeblendet werden (ist bereits initialisiert, aber noch unsichtbar), oder falls es sichtbar ist wieder verschwinden.
Die einfachste Möglichkeit ist es, im Menü ein eigenes JMenuItem zu haben, dass sich damit beschäftigt und per Accelerator angesprochen wird, z. B.:
(menuItemD[1] ist in diesem Fall natürlich ein JMenuItem und jMenuBar das Menü des JFrame.)
Das Menü wird in diesem Fall ausgeblendet, wenn Esc + Shift gedrückt wird. Das funktioniert allerdings nur, wenn das Menü sichtbar ist. Wenn man die Tastenkombination drückt, dann wird die JMenuBar auf unsichtbar gesetzt und lässt sich nicht wieder sichtabr machen.
Andere Lösung: KeyListener auf den JFrame legen und "lauschen", ob die Tastenkombination gedrückt wird. Das funktioniert prinzipiell auch, hat aber zwei dramatische Nachteile:
1.) Wenn der frame den Focus verliert dann erhält er keinen Input mehr.
2.) Es werden sämtliche Tastaturkombinationen abgefangen und es sind keine User-Eingaben mehr möglich.
Gibt es eine Lösung, den Accelerator aktiv zu halten, auch wenn das Menü nicht sichtbar ist? Oder gibt es eine andere schlaue Lösung? Ich schlage mich nun schon Jahre immer wieder einmal mit diesem Problem herum, und wurschtle immer mit irgendwelchen Workarounds. Gibt es eine saubere Lösung?
Ciao,
Wolfang
eigentlich klingt es einfach, aber irgendwie beiße ich mir die Zähne aus: Ich möchte eine Applikation undecorated und auf Bildschirmgröße darstellen, sodass nur die Applikation zu sehen ist. Bei einer bestimmten Tastenkombination soll ein Menü eingeblendet werden (ist bereits initialisiert, aber noch unsichtbar), oder falls es sichtbar ist wieder verschwinden.
Die einfachste Möglichkeit ist es, im Menü ein eigenes JMenuItem zu haben, dass sich damit beschäftigt und per Accelerator angesprochen wird, z. B.:
Code:
actionListenerD[1] = new ActionListener() {
public void actionPerformed(ActionEvent e) {
jMenuBar.setVisible(!jMenuBar.isVisible());
}
};
menuItemD[1].addActionListener(actionListenerD[1]);
menuItemD[1].setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_ESCAPE, ActionEvent.SHIFT_MASK));
(menuItemD[1] ist in diesem Fall natürlich ein JMenuItem und jMenuBar das Menü des JFrame.)
Das Menü wird in diesem Fall ausgeblendet, wenn Esc + Shift gedrückt wird. Das funktioniert allerdings nur, wenn das Menü sichtbar ist. Wenn man die Tastenkombination drückt, dann wird die JMenuBar auf unsichtbar gesetzt und lässt sich nicht wieder sichtabr machen.
Andere Lösung: KeyListener auf den JFrame legen und "lauschen", ob die Tastenkombination gedrückt wird. Das funktioniert prinzipiell auch, hat aber zwei dramatische Nachteile:
1.) Wenn der frame den Focus verliert dann erhält er keinen Input mehr.
2.) Es werden sämtliche Tastaturkombinationen abgefangen und es sind keine User-Eingaben mehr möglich.
Gibt es eine Lösung, den Accelerator aktiv zu halten, auch wenn das Menü nicht sichtbar ist? Oder gibt es eine andere schlaue Lösung? Ich schlage mich nun schon Jahre immer wieder einmal mit diesem Problem herum, und wurschtle immer mit irgendwelchen Workarounds. Gibt es eine saubere Lösung?
Ciao,
Wolfang