webForumDet fria alternativet
Logga in / Bli medlem

Binda tangenttryckning till fönster

Java

4 svar · 330 visningar · startad av spango

Medlem sedan juni 20008 205 inlägg
Frågan#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.

Medlem 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

Medlem sedan juni 20008 205 inlägg
#3

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

Medlem 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);
Medlem 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 :)

267 ms totalt · 4 externa anrop · v20260731065814-full.5386d3bf
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)