Just nu i M3-nätverket
Jump to content

Keyevent


Monshi

Recommended Posts

En fråga till, kanske jag får svar på denna ivartfall. Dålig utdelning här tidigare.

 

Vill ha möjlighet att styra programmet med tangentbordet, trycker man på de numeriska knapparna så ska det ex.v. motsvara att man trycker på en av knapparna i fönstret.

 

Enklet var dett få det att fungera till en början, men så fort man trycker på ett objekt i fönstret slutar det fungera. Antar att det är det att fokus försvinner från det objekt där jag skapat KeyListnren.

 

har testat två koder, båda ger samma resultat. Ett exempel:

this.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent evt) {
	System.out.println("this.keyTyped, event=" + evt);
}
});

 

Denna har jag placerad vid inititeringen av den JPanel som i sin tur innehåller flera paneler.

Så det som händer är att så snart jag tryckt på en kanpp eller annat objekt på panelen så slutar detektionen av knapptryck.

 

Var ska jag placera koden för att den ska vara aktiv varän fokus är på panelen eller ska jag göra något med alla komponenterna på panelen?

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Okej, snabbt går det ibland.

 

Kanske jag gör på rätt sätt, men någon här får gärna konfirmera.

 

Om jag sätter att objekten inte kan ta fokus innehåller grundpanelen alltid fokus.

 

Men detta är ju inte någom direkt smidig lösning, nog måste det gå att sätta globala (för ett GUI) som fungerar oberoende av var fokus finns.

 

men hur? det får ni gärna berätta för mig.

 

 

 

Link to comment
Share on other sites

Jag har inte skrivit Java på några år och då var det inte mycket, men jag hittade några rader som jag tror hade med det är att göra i min kod för Java 1.4:

 

private void defineKeys(JComponent comp)
{
   // Define all keys we use
   KeyStroke leftArrow1 = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0);
   // Define the input map, that is connect key and action name
   InputMap keyMap = comp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
   keyMap.put(leftArrow1, KEY_ACTION_STRINGS[ACTION_MOVE_LEFT]);
   // Define the actions, their names and their listener method
   Action moveLeft = 
           new AbstractAction(KEY_ACTION_STRINGS[ACTION_MOVE_LEFT]) {
           public void actionPerformed(ActionEvent e) { board.moveLeft();}};
   // Define the action map, that is connect the action name 
   // and the just defined action
   ActionMap doMap = comp.getActionMap();
   doMap.put(moveLeft.getValue(Action.NAME), moveLeft);
}

och anrop
       Box gameBox = Box.createVerticalBox();
       defineKeys(gameBox); // The keys to control the game

Hemligheten ligger väl just i WHEN_IN_FOCUESED_WINDOW skulle jag tro.

 

Link to comment
Share on other sites

Jajamensan, så enkelt var det.

 

Jag tackar!

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...