我的问题是当我使用
创建消息对话框时JOptionPane.showMessageDialog( ... )
在显示将图像绘制为背景的JPanel的应用程序中(取自:java swing: how to add an image to a jpanel),不显示背景图像,因此我必须最小化并最大化应用程序以获取背景图像。
到目前为止,我只能通过这样的方式取回背景图片:
app.getApplication().getMainFrame().repaint();
但它仅在我关闭消息对话框后才有效。
有什么想法吗?
答案 0 :(得分:3)
您发布的链接,因为他正在访问带文件的图像,这对我而言似乎不是一种访问应用程序资源的好方法,因为您必须使用URL。 看看这个示例代码,并检查出错的地方:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
public class ImageTest extends JPanel
{
private BufferedImage image;
private void displayGUI()
{
JFrame frame = new JFrame("Image Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
try
{
setImage(new URL("http://gagandeepbali.uk.to/" +
"gaganisonline/images/planetbackground.jpg"));
}
catch(MalformedURLException mue)
{
mue.printStackTrace();
}
frame.setContentPane(this);
frame.pack();
frame.setVisible(true);
JOptionPane.showMessageDialog(frame,
"I am working.",
"Image Working ?",
JOptionPane.QUESTION_MESSAGE);
}
private void setImage(URL path)
{
try
{
System.out.println(path);
image = ImageIO.read(path);
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
@Override
public Dimension getPreferredSize()
{
return (new Dimension(image.getWidth(), image.getHeight()));
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new ImageTest().displayGUI();
}
});
}
}