Wie ändere ich die Hintergrundfarbe eines Rahmens in Java aus einer anderen Klasse?
Frage
Ich habe Folgendes:
import javax.swing.JFrame;
public class Directions {
public Directions(){
JFrame frame = new JFrame("Direction");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new DirectionPanel());
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
Directions myTest = new Directions();
}
}
zweite Klasse:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DirectionPanel extends JPanel{
public DirectionPanel(){
addKeyListener(new DirectionListener());
setBackground(Color.yellow);
}
private class DirectionListener implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
//JOptionPane.showMessageDialog(null, "Hello Johnny");
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_LEFT){
setBackground(Color.red);
}
repaint();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
}
Warum wird der Rahmen nicht rot, wenn ich den linken Pfeil drücke? Ich hatte es auch ohne KeyCode -Test und dachte, dass es unabhängig von dem Schlüssel funktionieren würde, aber nicht. Vielen Dank.
Lösung
public DirectionPanel(){
addKeyListener(new DirectionListener());
setFocusable(true);// INSERT THIS
setBackground(Color.yellow);
}
JPanel
muss fokussierbar sein, um KeyEvents zu empfangen
Andere Tipps
Schwungkomponenten sollten verwenden Tastenbelegungen (Nicht Keylisten) zum Aufrufen einer Aktion, wenn die Tastatur verwendet wird. Ein Nebenevorteil davon ist so, dass Sie sich keine Sorgen um die Fokussierbarkeit machen müssen.
Action left = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
System.out.println( "Left" );
}
};
Object key1 = "left";
KeyStroke ks1 = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0);
panel.getInputMap(JPanel.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(ks1, key1);
panel.getActionMap().put(key1, left);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow