Zugriffstasten über Funktion erstellen

normaler_spinner

Erfahrenes Mitglied
hallo zusammen,

ich würde gerne meinen JMenuItems Zugriffstasten (Accleratorkeys) zuweisen. Da ich aber ein und den selben Code nicht immer wieder neu schreiben möchte soll das ganze über eine Funktion laufen.

Code:
	/**
	 * function to add JMenuItem
	 * @param String titel
	 * @param JMenu menu
	 */
	private void createMenuItem(String titel, JMenu menu, char accKey){
		JMenuItem menuItem = new JMenuItem(titel);
		menuItem.addActionListener(this);
		menu.add(menuItem);
		createShortCut(menuItem, accKey);
	}

	/**
	 * function to create accleratorkey
	 * @param menuItem
	 * @param accKey
	 */
	private void createShortCut(JMenuItem menuItem, char accKey){
		KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_X , Event.ALT_MASK);
		menuItem.setAccelerator(ks);
	}

nur soll statt des KeyEvent.VK_X irgendwie das richtige KeyEvent für den übergebenen char eingesetzt werden. Wenn ich statt des KeyEvent.VK_X direkt ein 'x' einsetzte dann nimmt er als Zugrifftstaste ALT+F9 statt ALT+x.
Wäre nett wenn mir einer weiterhelfen könnte - hab mit der Suchfunktion nichts in der Richtung gefunden - danke
 
Es gibt auch die Konstante "VK_F9".

Es gibt auch die passende "getKeyStroke(...)"-Methode: :)

Code:
private void createShortCut(JMenuItem menuItem, char accKey){
KeyStroke ks = KeyStroke.getKeyStroke(new Character(accKey) , Event.ALT_MASK); 	menuItem.setAccelerator(ks);
	}
Warum Sun dafür die Wrapper-Klasse übergeben läßt, soll ein Rätsel bleiben... :confused:
 
Nach gründlichem einminütigem Nachdenken komme ich von selbst drauf. Sun hat weit gedacht und dem Entwickler unnötige Fehlerquellen "verbaut": ;-)

Es gibt bereits eine Methode mit zwei int-Parametern, nun käme eine Methode mit char und int dazu.

Code:
public KeyStroke getKeyStroke(char, int) {...}
public KeyStroke getKeyStroke(int, int) {...}

Was passiert beim Aufruf von "getKeyStroke('a', 7)"? ---> Genau: Der Kompiler meckert!
Ein char passt schließlich ohne Cast in ein int. Deßhalb hat Sun die Wrapper-Klasse verwendet. Somit ist alles klar. :)
 
hi schnuffie ...

danke für deine antwort ... hab inzschwischen aber auch schon herausgefunden warum er als Zugriffstaste statt ALT-X ALT-F9 verwendet hat. Wrapper-Klasse wird eigentlich nicht benötigt: Anstatt 'x' hätte ich mal 'X' übergeben sollen - dann es ... warum jetzt auchgerechnet bei dem kleinen x F9 rauskommt bleibt mir allerdings schleierhaft :confused:
 
Zurück