我仍然在学习Java Swing工具包及其工作原理。我正在研究如何将图像添加到我的JFrame(通过JPanel)并找到本教程(HERE)。我的问题有办法,我设置了做我的源代码:关于将BufferedImage添加到JPanel
public class GraphicsPracticeDrawing extends JPanel{
private BufferedImage img;
public GraphicsPracticeDrawing() {
this.setBackground(Color.BLACK);
//Initialize(); //Program runs with no error/warning, but nothing appears in frame
}
//method initialized the BufferedImage
public void Initialize() {
try {
img = ImageIO.read(new File("images/star.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void paint(Graphics g) {
super.paint(g);
Initialize(); //initialize the BufferedImage
g.drawImage(img, 25, 25, null);
}
}
如果我带走初始化方法,并把try/catch语句(初始化我的形象)我的构造函数中,我的代码编译并运行,但我最终得到一个空白窗口。如果我将try/catch放在paint中,就像它在源代码中显示的一样,我的程序运行得非常好,图像加载,黑色背景以及其他一切。
TLDR; Image1是当我在构造函数中进行初始化时发生的情况,Image 2是在运行良好时发生的情况,并且在我的paint方法中进行初始化。 (Take a Look)
为什么我无法在构造函数中初始化图像?
您描述的行为并非我在您描述的情景下期望的行为。你可以发布一个展示你描述的行为的[SSCCE](http://sscce.org)吗? –
“Swing程序应该重写'paintComponent()'而不是重写'paint()'。” - [在AWT和Swing中绘制:绘制方法](http://java.sun.com/products/jfc/tsc/文章/绘画/ index.html的#回调)。 – trashgod
你确定你的图像像你认为的那样从构造函数中读取时被填充了吗?查找打印到控制台的异常。你可以试着让异常从构造函数中解脱出来,因为e.printStacktrace()让你的程序继续工作,就好像它在真的处于不良状态时一样工作。 – chubbsondubs