Je l'ai essayé pendant des heures maintenant. J'ai une classe qui étend JComponent, et dans son paintComponent j'essaye de dessiner une image, mais je ne peux pas. Voici mon code:Comment afficher une image bufferedImage dans un composant JComponent?
public class Main extends JComponent{
public static void main(String[] args) {
Main main = new Main();
JFrame frame = new JFrame(Info.getGameTitle());
frame.add(main);
frame.setSize(Info.getWidth(), Info.getHeight());
frame.setResizable(false);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.out.println("Window closed");
System.exit(0);
}
});
frame.setAlwaysOnTop(true);
frame.setFocusable(true);
frame.setAutoRequestFocus(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Graphics g = main.getGraphics();
main.paint(g);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
BufferedImage image = null;
try {
image = ImageIO.read(new FileInputStream("images/01.jpg"));
}catch(FileNotFoundException e) {
System.out.println("Could not find file!");
e.printStackTrace();
}catch(IOException e) {
System.out.println("Could not read file!");
e.printStackTrace();
}
g.drawImage(image, 0, 0, this);
}
}
Il n'y a aucune exception, donc l'image semble être chargée. Cependant, rien n'apparaît à l'écran. Si j'essaie de dessiner des formes ou du texte, cela fonctionne bien. Qu'est-ce que je fais de mal?
EDIT: Maintenant, j'ai fourni un exemple de travail.
Envisager de fournir un [exemple runnable] (https://stackoverflow.com/help/mcve) ce qui démontre votre problème. Ce n'est pas un vidage de code, mais un exemple de ce que vous faites qui met en évidence le problème que vous rencontrez. Cela entraînera moins de confusion et de meilleures réponses. – MadProgrammer
Sachez que 'paintComponent' sera appelé * très * souvent. Par conséquent, ce n'est pas une bonne idée de faire des choses qui prennent du temps (comme lire un fichier image) là –
Quel est le problème avec un 'JLabel'? – MadProgrammer