J'essaie de m'habituer à utiliser la méthode paintComponent()
avant de l'intégrer dans mon programme. Cependant, chaque fois que j'essaie de dessiner une image sur le JPanel
, cela ne fonctionne pas. J'ai mis le code ci-dessous. Toute aide serait appréciée. Merci.La méthode paintComponent ne dessine pas l'image
public class ExperimentGame extends JPanel{
Image image;
public ExperimentGame(){
JFrame frame = new JFrame();
SwingUtilities.isEventDispatchThread();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.pack();
frame.setSize(500,500); //my edit
this.setBackground(Color.WHITE);
frame.setVisible(true);
try {
image = ImageIO.read(this.getClass().getResource("spaceship (0).png"));
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(image, 50, 50, null);
}
}
public class ExperimentMain {
public static void main(String[] args) {
ExperimentGame game = new ExperimentGame();
}
}
Pourquoi est-ce que dans tous les didacticiels que j'ai examinés, ils n'utilisent pas les lignes de code que vous suggérez et pourtant leur programme fonctionne bien? – jmao
Cela a fonctionné, mais d'après ce que je comprends, cela ne devrait pas être nécessaire d'ajouter. – jmao
@jmao Ces lignes ne devraient pas être nécessaires. Si leur ajout fait une différence, vous devez probablement obéir aux [règles de threading Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/) et changer votre méthode 'main' en' EventQueue.invokeLater (() -> new ExperimentGame()); ', qui force votre code à s'exécuter dans le thread d'envoi d'événement AWT. – VGR