所以我在JPanel中绘制了一个图像,它本身被添加到JFrame中。但是,当第一次绘制图像时,它看起来非常小。我不确定这是面板问题还是图像问题。如下图所示: ![在此输入图像说明] [1]
我在图像周围画了一个矩形。
现在JPanel应该包含在JFrame中。如上所示,JFrame不应该被着色。 JPanel的大小约为JFrame的四分之一,图像应该占据几乎所有的JPanel。
您能否告诉我它是问题的图像还是面板。对不起,如果它看起来很明显。
等待SSCCE
答案 0 :(得分:5)
根据您发布的几行代码,我不知道您在做什么。在代码中没有任何地方你实际创建/读取图像。
据我所知,Mandelbrot Set实际上是通过绘制代码来完成的。如果是这样,问题可能是您没有覆盖绘制面板的getPreferredSize()
(不要使用setSize()方法)来返回您正在绘制的图像的大小。有关详细信息,请阅读Custom Paining上的Swing教程中的部分。
或者,如果您实际使用的是现有图像,请阅读How to Use Icons上的Swing教程中的部分,了解使用图像的工作示例。
此外,在使框架可见之前,应将组件添加到框架中。
如果您需要更多帮助,请发布展示问题的正确SSCCE。
答案 1 :(得分:1)
BufferedImage image = ImageIO.read(file); //Read image through BufferedReader
labelimage.setIcon(new ImageIcon(image.getScaledInstance(labelimage.getWidth(), labelimage.getHeight(), image.SCALE_SMOOTH))); // This line will automaticallically set Image size equal to size of Jlabel
答案 2 :(得分:-1)
如何在面板中添加标签,并使用setIcon(..)
通常我使用下面的类来使图像符合标签大小(我使我的标签具有静态大小 - 不可调整大小)..你可能想修改它以满足你的需要..
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.net.URL;
import javax.swing.ImageIcon;
public class CustomImageIcon extends ImageIcon {
private BufferedImage dest;
public CustomImageIcon(String filename) {
super(filename);
}
public CustomImageIcon(Image image) {
super(image);
}
public CustomImageIcon(URL location) {
super(location);
}
@Override
public synchronized void paintIcon(Component c, Graphics g, int x, int y) {
if(c!=null)
dest = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);
else dest = new BufferedImage(getIconWidth(), getIconHeight(), BufferedImage.TYPE_INT_ARGB);
ImageObserver imgObs = getImageObserver();
if(imgObs==null) imgObs = c;
int width;
int height;
if(c!=null)
{
width = c.getWidth();
height = c.getHeight();
}
else
{
width = getIconWidth();
height = getIconHeight();
}
g.drawImage(dest, 0, 0, c);
g.drawImage(
getImage(),
0,
0,
width,
height,
imgObs);
}
}