Tastenkombinationen überschreiben

GS_Unnamed

Mitglied
Hallo zusammen

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?

Gruss
GSU
 

Michael...

Top Contributor
Mit
Code:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
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
		}
	});
Evtl. gibt es auch elegantere Lösungen...
 

Mujahiddin

Top Contributor
@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 );
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Tastenkombinationen für das Betriebssystem deaktivieren Allgemeine Java-Themen 5
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
M BufferedImage toString() überschreiben Allgemeine Java-Themen 5
S Methoden Methoden überschreiben Allgemeine Java-Themen 3
J Eintrag in Datei überschreiben Allgemeine Java-Themen 6
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
M Classpath Standard Klasse überschreiben Allgemeine Java-Themen 2
A Vererbung finale Methoden überschreiben Allgemeine Java-Themen 24
S compareTo() überschreiben - Problem Allgemeine Java-Themen 8
D Arrays überschreiben sich Allgemeine Java-Themen 2
A ar während der Laufzeit überschreiben Allgemeine Java-Themen 20
R Input/Output Objekte speichern ohne überschreiben Allgemeine Java-Themen 7
Tobse Input/Output Datei Teilweise überschreiben Allgemeine Java-Themen 7
D this mit Objekt überschreiben Allgemeine Java-Themen 17
L Datei sicher löschen/mehrfach überschreiben? Allgemeine Java-Themen 2
N Datei überschreiben Allgemeine Java-Themen 23
M Swing Originaldatei wird gelöscht, anstatt mit temporärer überschreiben (Ubuntu) Allgemeine Java-Themen 9
Meldanor finalize Methode überschreiben für .close() Allgemeine Java-Themen 5
T Mit JNI finale Variablen überschreiben Allgemeine Java-Themen 14
W DefaultComboBoxModel überschreiben Allgemeine Java-Themen 2
R Dateiarbeit: In Datei weiterschreiben statt überschreiben Allgemeine Java-Themen 5
G toString() von java.io.File überschreiben Allgemeine Java-Themen 8
MQue tableChanged() überschreiben Allgemeine Java-Themen 4
D Instanzmethoden mit statischen Methoden überschreiben Allgemeine Java-Themen 8
ruutaiokwu Per Reflection membervariablen überschreiben / zuweisen / nullen Allgemeine Java-Themen 5
G Button-Array überschreiben und dem Container zufügen? Allgemeine Java-Themen 2
B in file immer 2. zeile überschreiben Allgemeine Java-Themen 8
E *.class ändern/ersetzen/überschreiben. Allgemeine Java-Themen 9
T Final Methode dennoch überschreiben! Allgemeine Java-Themen 10
G static- Methoden überschreiben Allgemeine Java-Themen 10
O Exceptionklasse überschreiben Allgemeine Java-Themen 7
V Methode überschreiben -> leer lassen? Allgemeine Java-Themen 3
R toString() methode überschreiben mit rekursivem aufruf. Allgemeine Java-Themen 8
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
P java.util.List - Typ überschreiben Allgemeine Java-Themen 9
H Methoden überschreiben Allgemeine Java-Themen 4
André Uhres equals überschreiben Allgemeine Java-Themen 31
P Eigenschaften eines Buttons überschreiben/ändern Allgemeine Java-Themen 2
M Array nicht überschreiben? Allgemeine Java-Themen 6
A Objekt überschreiben Allgemeine Java-Themen 6
B Equals Methode überschreiben mit Array Allgemeine Java-Themen 2
N Konsolenzeile überschreiben? Allgemeine Java-Themen 6
N Java Klassen "überschreiben" Allgemeine Java-Themen 28
S java.io.InputStream.read(byte[] b) überschreiben Allgemeine Java-Themen 33
J txt löschen oder txt datei überschreiben Allgemeine Java-Themen 1
M Methode überschreiben? Allgemeine Java-Themen 11
M Mit einem Java Programm Festplatte mit 0 überschreiben Allgemeine Java-Themen 2
meez java.security Datei "überschreiben" Allgemeine Java-Themen 4
M Bean Listener hinzufügen und Methode später überschreiben Allgemeine Java-Themen 27
P Klassen überschreiben Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben