Come faccio a cambiare il colore di un telaio in Java da un'altra classe di fondo?
Domanda
Ho il seguente:
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();
}
}
seconda classe:
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
}
}
}
Perché non la cornice diventa rosso quando ho colpito la freccia sinistra? Ho anche avuto con nessuna prova keycode pensare che non importa la chiave che avrebbe funzionato, ma non lo feci. Grazie.
Soluzione
public DirectionPanel(){
addKeyListener(new DirectionListener());
setFocusable(true);// INSERT THIS
setBackground(Color.yellow);
}
JPanel
deve essere attivabile per ricevere KeyEvents
Altri suggerimenti
componenti Swing dovrebbero usare principali Associazioni (non KeyListeners) per invocare un'azione quando si utilizza la tastiera. Un vantaggio collaterale di questo è che così non devi preoccuparti di focusability.
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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow