Tastenkombination in SWT

ceiphren

Grünschnabel
Hi, ich möchte Shortcuts für meine SWT-Application einbinden.
Es soll so aussehen, dass, wenn man ctrl gedrückt hält und dann irgendeine andere Taste drückt, eine Aktion ausgeführt wird.


shl.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent e){
switch(e.keyCode)
{
case SWT.CTRL: ?; break;
}
}

public void keyReleased(KeyEvent e){
}
});

Ich habs über eine zweiten Listener versucht, was allerdings nicht richtig funktionierte.
Was muss ich tun, damit das programm eine zweite taste in abhängigkeit von der ersten überprüft?

grüße
ceiphren
 
Hallo,

wenn ich Tastenkombis für z.B. eine komplette JMenuBar in Apps eingebaut habe, dann habe ich die Methoden
Code:
beispiel.setMnemonic(Char arg0); 
beispiel.setAccelerator(KeyStroke arg0);
verwendet, damit hat das immer wunderbar funktioniert!
( Die Argumente hat Eclipse vorgeschlagen )

Gruß
 
Ich mache das mit JFace:

Java:
import org.eclipse.jface.bindings.keys.KeySequence;
import org.eclipse.jface.bindings.keys.KeyStroke;

	private static void addKeyFilter() {
		display.addFilter(SWT.KeyDown, new Listener( ) {

			public void handleEvent(Event event) {
				KeyStroke stroke = KeyStroke.getInstance(event.stateMask,
						event.keyCode);
				CommandDefinition def = GlobalPluginKeyManager.getCommand(KeySequence.getInstance(stroke));
				executeCommand(def);
			}
		});
	}
 
Hallo,
ich bringe irgendweie die Enden nicht zusammen!!
Ich habe eine Anwendung mit SWT Komponenten, und möchte in der Anwendung allgemein auf zum Bsp. "STRG" + "S" reagieren.

Wenn Du das mit jFace machst, hast Du zusätzlich ein API eingebunden, da bei mir die Meldung kommt, das CommandDefinition nicht bekannt ist

Und wie kann ich quasi ein globalen KeyListener in die Anwendung integrieren, der immer auf allgemeine Shortcuts reagiert? Zum Beispiel "STRG" + "S" für speichern.
 
Hallo,
eine Lösung wäre diese:

Java:
	shell.getDisplay().addFilter(SWT.KeyDown, new Listener() {
		@Override
		public void handleEvent(Event e) {
			if((e.stateMask & SWT.CTRL) != 0 && e.keyCode == 's')
				System.out.println("Do what ever you want.");
		}
});

Gruß,
Jens
 
Moin,

falls Du auch Swing nutzt/nutzen kannst, hier ein kleines Beispiel, wie ich es in meinen Projekten verwende:

Java:
JMenuItem print = new JMenuItem( "Drucken" ); // <Crtl><D>
 print.setAccelerator( javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK) );
 MenuePkt4.add( print );
 print.addActionListener( this );

Gruß
Klaus
 
Zurück