2010-02-05 2 views
1

Je donne les résultats suivants:Comment modifier la couleur d'arrière-plan d'une image en Java d'une autre classe?

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(); 
    } 
} 

deuxième 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 
     } 
    } 
} 

Pourquoi ne pas le cadre devient rouge quand je frappe la flèche gauche? Je l'avais aussi sans test de code clé, pensant que peu importe la clé, cela fonctionnerait mais ce n'était pas le cas. Je vous remercie.

+0

Le message contextuel a-t-il été affiché lorsqu'il n'a pas été mis en commentaire? –

+0

no. la popup a échoué. Je me suis dit que c'était le popup, donc je suis allé à quelque chose de plus facile comme le changement de couleur mais il a échoué aussi. – johnny

Répondre

6
public DirectionPanel(){ 
    addKeyListener(new DirectionListener()); 
    setFocusable(true);// INSERT THIS 
    setBackground(Color.yellow); 
} 

JPanel doit être focalisable pour recevoir KeyEvents

+0

Référence: http://forums.sun.com/thread.jspa?threadID=5424784. (J'étais sur le point de répondre à la même chose.) –

+0

Merci pour la référence .. –

3

composants Swing doivent utiliser Key Bindings (non KeyListeners) pour appeler une action lorsque le clavier est utilisé. Un avantage secondaire de cette façon est que vous n'avez pas à vous soucier de la mise au point.

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); 
Questions connexes