【发布时间】:2016-10-19 23:05:39
【问题描述】:
我正在学习 JavaSwing。我想在框架上绘制一个图像,但我希望绘制的图片分辨率为 300*300。这是我在面板上绘制图像的代码。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Picture
{
JFrame frame;
public static void main(String[] args)
{
Picture poo = new Picture();
poo.go();
}
private void go()
{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setVisible(true);
frame.getContentPane().add(new ImageOne());
}
class ImageOne extends JPanel
{
public void paintComponent(Graphics g)
{
Image img = new ImageIcon("image.jpg").getImage();
g.drawImage(img, 2, 2, this);
}
}
}
谁能告诉我怎么做?我搜索了网络,但我可以找到有关 BufferedImage 的解释,但我不知道如何使用它。
提前致谢。
【问题讨论】:
-
覆盖
getPreferredSize(),为example。 -
@trashgod 我在
class ImageOne中使用了getPrefferedSize(),但它并没有改变任何东西。 -
请编辑您的问题以包含minimal reproducible example,以显示您修改后的方法;还有“如果你不尊重opaque property,你可能会看到视觉伪影。”—
paintComponent();另见Initial Threads。 -
1)
public void paintComponent(Graphics g)使用@Override表示法。 2) 任何被覆盖的paint 方法都应该以调用super 方法开始。 3)Image img = new ImageIcon("image.jpg").getImage();永远不要尝试在绘画方法中加载图像。在构造函数中加载它(创建一个)并将其存储为类的属性。 4) 但不要使用ImageIcon加载图像,因为它会默默地失败。而是使用ImageIO.read(..)5) 不要尝试将图像加载为File。它显然是应用程序的一部分。并将成为嵌入式资源。 .. -
.. 应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。 embedded-resource 必须通过 URL 而不是文件访问。请参阅info. page for embedded resource 了解如何形成 URL。6) 如果您咨询Java Docs for the
GraphicsAPI methods,您可能会注意到drawImage(..)有许多变体,其中至少一个解决了这个问题。
标签: java image swing paintcomponent