Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe jetzt schon einiges mit KeyListener etc. rumprobiert und ich finde es leider nicht heraus, google ist auch nicht besonders hilfreich und die Api hilft mir hier auch nicht ???:L
Windows gibt ja einige Tastenkombination für Programme vor.
Bei einem meiner Programme möchte ich eine dieser Kombinationen überschreiben, damit sie nicht mehr die vorherige Funktion erfüllt.
z.B. ALT+F4 schliesst das Programm
Wie kann ich diese Kombination überschreiben bzw. abstellen?
kann man das schließen des JFrames grundsätzlich (also auch mit ALT F4) verhindern.
Wenn die Einschränkung mit obiger Lösung zu extrem ist. Könnte man auch mit Key Bindings die Input und ActionMap einer Komponente die sich im Frame befindet manipulieren und ins Leere laufen lassen.
Java:
InputMap map = panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.ALT_MASK), "deactivate_ALT_F4");
panel.getActionMap().put("deactivate_ALT_F4", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
//nothing to do
}
});
@Michael das klappt nicht so ganz.
JFrames haben generell keine InputMap.
Du kannst aber folgendes machen:
Java:
public static void deactivateKeyStrokeForJFrame(final JFrame frame, final KeyStroke keyStroke) {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher( new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if( KeyStroke.getKeyStrokeForEvent( e ).equals( keyStroke ) && ( frame == e.getComponent() || frame.isAncestorOf( e.getComponent() ) ) )
return true;
return false;
}
} );
}
public static void deactivateKeyStrokeForJComponent(final JComponent component, final KeyStroke keyStroke) {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher( new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if( KeyStroke.getKeyStrokeForEvent( e ).equals( keyStroke ) && component == e.getComponent() )
return true;
return false;
}
} );
}
public static void deactivateKeyStrokeForApplication(final KeyStroke keyStroke) {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher( new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if( KeyStroke.getKeyStrokeForEvent( e ).equals( keyStroke ) )
return true;
return false;
}
} );
}
Die erste Methode schaltet den KeyStroke für ein ganzes JFrame aus, also inklusive alle Components, die sich darin befinden.
Die zweite Methode schaltet den KeyStroke für ein einzelnes JComponent aus (z.B. JTextField)
Die dritte Methode schaltet den KeyStroke für die gesamte Applikation aus, also alle JFrames, Components etc.
Du kannst das in etwa folgendermaßen verwenden:
Java:
public static void main(String... args) throws Exception {
JFrame frame = new JFrame();
// JTextField field = new JTextField();
// frame.getContentPane().add( field );
deactivateKeyStrokeForJFrame( frame, KeyStroke.getKeyStroke( KeyEvent.VK_F4, InputEvent.ALT_DOWN_MASK ) );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setSize( 200, 200 );
frame.setVisible( true );
}