【发布时间】:2015-10-07 19:36:08
【问题描述】:
在不深入细节的情况下,我正在努力在 Swing 中创建一个类似桌面的程序,在背景图像上绘制图标。通常我将 JPanel 或其他 JComponent 子类化并在其上绘图,但想尝试一些新的东西只是为了好玩,并尝试在 JFrame 的 instance 上绘图,而不是让我的程序成为它的子类。
我知道这不是公认的执行此操作的方式,但是在我对 Swing 以及它如何绘制组件的理解中,发现未绘制图像暴露了一个缺失的链接(我想是其中之一)。
让我感到困惑的是,如果我的程序子类化了 JFrame 并且我重写了 paint() 方法(换句话说,这是公认的方式),它会将图像绘制到 JFrame 中,但它不会对以下实例执行此操作JFrame 在我的非子类程序中。
希望基本上显示我想要做的代码会有所帮助:
public class ImageLoader
{
BufferedImage img = null;
JFrame window = null;
public ImageLoader()
{
try
{
img = ImageIO.read(new File("src/strawberry.jpg"));
}catch(IOException e)
{
e.printStackTrace();
}
window = new JFrame("Strawberry Viewer");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.pack();
window.setVisible(true);
//Why can't I do something akin to the following to draw on an instance of JFrame?
Graphics g = window.getGraphics();
paint(g);
}
public void paint(Graphics g)
{
g.drawImage(img, 0, 0, null);
}
public static void main(String[] args)
{
new ImageLoader();
}
}
我已经阅读了 Oracle 的页面 "Painting in AWT and Swing",但我仍然不明白为什么我不能在 JFrame 实例上绘图。在任何情况下我可以在组件的实例上进行绘制,或者如果我想在它们上绘制它们是否都必须被子类化?
最后,如果问题主要是由于我对 Swing 工作原理的严重误解,有哪些推荐的书籍或其他资源来理解 Swing?
提前感谢您的帮助。我很感激。
【问题讨论】:
标签: java swing components instance paint