Ich nehme mal ganz stark an, dass ich einen Elefanten auf der Leitung sitzen habe:
Ich habe ein Panel, welches mein Hauptmenü darstellt. Die ausgewählte Option soll gehighlighted werden, anders gesagt, wenn (per Pfeiltasten) eine Option ausgewählt wird, muss das Panel repainted werden. Die Pfeiltasten werden im Panel selbst ausgelesen, per KeyBindings.
Nun frage ich mich, ob es möglich ist, das Panel bei Auswahl einer Option zu repainten, also dass es sich selbst repainted. Aktuell habe ich es in mein Runnable eingebaut, wo dann immer wieder geprüft wird, ob etwas ausgewählt wurde, und wenn ja, wird repainted.
Hier ein paar Codeschnipsel, die das Ganze evtl. verdeutlichen:
Hier die KeyBindings, "state" beschreibt, welche Option gewählt wurde. Sprich, durch drücken der Pfeiltaste nach unten wird state um eins erhöht, also die nächste Option in der Liste ausgwählt.
im runnable habe ich das hier stehen.
wie gesagt, das Ganze kommt mir reichlich unelegant vor...
Ich habe ein Panel, welches mein Hauptmenü darstellt. Die ausgewählte Option soll gehighlighted werden, anders gesagt, wenn (per Pfeiltasten) eine Option ausgewählt wird, muss das Panel repainted werden. Die Pfeiltasten werden im Panel selbst ausgelesen, per KeyBindings.
Nun frage ich mich, ob es möglich ist, das Panel bei Auswahl einer Option zu repainten, also dass es sich selbst repainted. Aktuell habe ich es in mein Runnable eingebaut, wo dann immer wieder geprüft wird, ob etwas ausgewählt wurde, und wenn ja, wird repainted.
Hier ein paar Codeschnipsel, die das Ganze evtl. verdeutlichen:
Hier die KeyBindings, "state" beschreibt, welche Option gewählt wurde. Sprich, durch drücken der Pfeiltaste nach unten wird state um eins erhöht, also die nächste Option in der Liste ausgwählt.
Java:
getInputMap(this.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "EscapeAction");
getActionMap().put("EscapeAction", new AbstractAction(){
public void actionPerformed(ActionEvent arg0){
System.exit(0);
}
});
getInputMap(this.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "DownAction");
getActionMap().put("DownAction", new AbstractAction(){
public void actionPerformed(ActionEvent arg0){
incState();
}
});
getInputMap(this.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "UpAction");
getActionMap().put("UpAction", new AbstractAction(){
public void actionPerformed(ActionEvent arg0){
decState();
}
});
[code=Java]
[code=Java]
public void incState(){
state++;
if (state > 3)
state = 1;
stateChanged = true;
}
public void decState(){
state--;
if (state < 1)
state = 3;
stateChanged = true;
}
public boolean isStateChanged(){
return stateChanged;
}
im runnable habe ich das hier stehen.
Java:
if (menu.isStateChanged())
menu.repaint();
wie gesagt, das Ganze kommt mir reichlich unelegant vor...