我已经阅读了很多关于这个问题的答案,但我无法找到我的错误,即使是一个简单的代码。下面是问题:我想在JPanel中的JLabel中绘制图像,但未调用JLabel的paintComponent()方法。Java重绘()不调用paintComponent()绘制图像
下面是代码:
的ImagePainter类应绘制的图像
public class ImagePainter extends JLabel{
private Image image;
public ImagePainter(){
try {
image = ImageIO.read(new File("src/testgui/image.png"));
} catch (IOException exception) {
exception.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
System.out.println("in paintComponent");
}
}
下面是一个标准的JFrame。我小心添加JPanel到contentPane
public class Display extends JFrame{
public Display(){
JPanel jp = new JPanel();
ImagePainter i = new ImagePainter();
getContentPane().add(jp);
jp.add(i);
jp.repaint();
setSize(800, 800);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
最后主要是。我实例化的EDT显示像其他人说的事:
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
Display d = new Display();
}
});
}
}
最后,我认为,如果我直接ImagePainter添加到contentPane,图像绘制正确。这可能是一个愚蠢的错误,但我花了几个小时试图找到它,真的看不到它。先谢谢你 !
1)为了更好地提供帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 (把'main'方法放在'Display'类中,将它引入到2个类中,然后将'ImagePainter'从'public'降级到默认访问并粘贴到最后。)2)获取图像的一种方法)例如是热链接到[此Q&A](http://stackoverflow.com/q/19209650/418556)中看到的图像。 –