webForumDet fria alternativet

Binda tangenttryckning till fönster

4 svar · 330 visningar · startad av spango

spangoMedlem sedan juni 20008 205 inlägg
#1

En pinsam kunskapslucka har uppenbarat sig hos mig :r

Hur binder man en tangenttryckning (typ Escape eller Alt-F4) till ett fönster? Normalt får man ju det automagiskt av miljön man arbetar i, men efter att ha övergått från GNOME till WindowMaker får jag inte längre några sådana gratissaker :( Tilläggas bör också att det inte finns (och inte någonsin kommer att finnas) menyer i min JFrame, så jag kan inte koppla tangenttryckningen till ett menyalternativ heller...
Jag har desperat försökt koppla en KeyListener till min JFrame, samt till dess rootPane och contentPane, men inget verkar funka. Jag har dessutom försökt koppla tangenttryckningarna till inputMap:en i {root,content}Pane, men det funkar inte det heller.

ViktorMedlem sedan aug. 20021 752 inlägg
#2

Det som jag kan komma på är att du använder samma instans av en keylistener för alla komponenter och sedan i den först kollar om det är Esc eller Alt+F4 och om det inte är det så använder du event.getSource() för att få reda på vilken komponent som är aktiv, dvs var användaren är och trycker på knappen.

/Viktor

spangoMedlem sedan juni 20008 205 inlägg
#3

Men blä. Det orkar jag ju inte göra...

Aleph_OneMedlem sedan juni 2003372 inlägg
#4

Så här kan du göra (för att tex stänga ett fönster med escape)

KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false);
Action escapeAction = new AbstractAction() {
	public void actionPerformed(ActionEvent e)
	{
		dispose();
	}
};
getRootPane().getInputMap(JComponent.WHEN_FOCUSED).put(escape, "ESCAPE");
getRootPane().getActionMap().put("ESCAPE", escapeAction);
spangoMedlem sedan juni 20008 205 inlägg
#5

All your base are belong to Aleph_One. Tack som fan!

\r Kanske skulle tillägga att WHEN_ANCESTOR_OF_FOCUSED_COMPONENT var mer i enlighet med vad jag hade föreställt mig än WHEN_FOCUSED :)

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)