我正在尝试显示图像(作为JLabel
s的图像图标)。
当我不想显示图像时,一切正常,即:
for (int i=0;i<value;i++)
{
for (int j=0;j<value;j++)
{
c.gridx=i;
c.gridy=j;
JLabel element = new JLabel("!");
pane.add(element,c);
}
}
但是,如果我这样做:
for (int i=0;i<value;i++)
{
for (int j=0;j<value;j++)
{
c.gridx=i;
c.gridy=j;
JLabel element = new JLabel();
element.setIcon(wall);
pane.add(element,c);
}
}
它会产生大量的错误信息。 控制台输出:http://pastebin.com/teuuWjRX
代码:(带有语法高亮的pastebin版本:http://pastebin.com/2utFJ0UM)
package tut;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class Main extends JFrame{
//private static int value;
public Main()
{
int value=151;//151
ImageIcon wall = new ImageIcon();
try
{
BufferedImage tempImage = ImageIO.read(this.getClass().getResource(("/resources/images/test.png")));
wall = new ImageIcon(tempImage.getScaledInstance(4, 4, Image.SCALE_DEFAULT));
}
catch (IOException e){}
Container pane = getContentPane();
pane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
for (int i=0;i<value;i++)
{
for (int j=0;j<value;j++)
{
c.gridx=i;
c.gridy=j;
JLabel element = new JLabel();
element.setIcon(wall);
pane.add(element,c);
}
}
//Main Frame
setTitle("Example1");
setSize(value*8,value*8);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main (String[] args)
{
Main test1= new Main();
}
}
我的问题是:
P.s。:getScaledInstance可以使用还是有更好的方法?
非常感谢任何帮助。
编辑:总的来说,我没有发现代码有任何实际问题,我唯一可以说问题不在于缩放。解析没有缩放的小尺寸图像(如8x8或4x4)也会产生错误,但是对于解析大小为16x16或更高或缩放到16x16的图像,一切都很好。将小尺寸图像(即元素)放置/添加到布局可能是一个问题。
答案 0 :(得分:0)
您使用wall
作为图标。 wall
是在try块中创建的,您甚至不记录引发的异常。
问题可能出在这里:也许你在图标创建时引发异常(IOException)而你却看不到它。
您可以尝试使用JLabel构造函数public JLabel(Icon image)
而不是空构造函数
阿波罗