Najpierw musisz odczytywać stan przycisku - a konkretnie to czy jest w stanie przyciśniętym czy nie. Jeżeli nie jesteś w stanie tego sprawdzić bezpośrednio, to musisz obsłużyć listenerem zdarzenia wciśnięcia i puszczenia potrzebnego klawisza oraz odpowiednio zmieniać stan zmiennej określającej jego stan przyciśnięcia. U Ciebie może to być zmienna wlaczony. Nie wystarczy jednak odczytywanie jaki klawisz wygenerował zdarzenie, ale trzeba też określić jakie to zdarzenie.
Zakładam, że to co opisałeś jako "//obsluga przycisku" to tylko fragment metody obsługi zdarzenia keyTyped() lub keyPressed(). Potrzeba więc, żeby były np.:
@Override public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
wlaczony = true;
repaint();
// button.getModel().setArmed(true);
// button.getModel().setPressed(true);
// button.paintImmediately(0, 0, button.getWidth(), button.getHeight());
}
}
@Override public void keyReleased(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
wlaczony = false;
repaint();
// button.getModel().setPressed(false);
// button.getModel().setArmed(false);
// button.paintImmediately(0, 0, button.getWidth(), button.getHeight());
}
}
Wykomentowane masz alternatywne podejście, które przydaje się kiedy z klawiszem masz związanego jakiegoś konkretnego buttona. Wtedy naciskanie klawisza jest odwzorowywane wciśnięciem i puszczaniem tego przycisku. Oczywiście zamiast button można wstawić this (do paintImmediately()) i/lub to samo do wywołań getModel() jeżeli sam obiekt dziedziczy już po JButton.
ps. W przypadku buttone ewentualnie przydałoby się interaktywne wciskanie i puszczanie myszą takiego buttona, co można osiągnąć za pomocą rejestracji ChangeListenera na button.getModel().addChangeListener(ChangeListener e) i podania mu procedury obsługi np.coś w tym stylu:
void stateChanged(ChangeEvent e)
{
wlaczony = button.getModel().isPressed();
}
Wtedy miałbyś pełną kontrolę nad klawiszem i jakimś przyciskiem ekranowym jednocześnie. Byłyby one ze sobą ściśle powiązane (tak jak np. w jakiejś grze).