我试图显示图像(作为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
代码:(引擎收录版W /语法高亮: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();
}
}
我的问题是:
- 为什么会引发异常的比较呢? (从我的角度来看,似乎一切正常 )
- stackOverFlow问题是否可能是由于每次对象声明引起的? (因为我没有看到循环中的其他问题)。
P.s .:是getScaledInstance可以使用还是有更好的方法?
任何帮助将不胜感激。
编辑:总的来说,我没有发现任何真正的问题与代码,唯一我可以说,这个问题不是与缩放。解析小尺寸图像(如8x8或4x4)不带缩放也会产生错误,但对于解析尺寸为16x16或更大的图像或缩放至16x16的图像,一切都很好。将小尺寸图像(即元素)放置/添加到布局可能会带来一些问题。
的GridBagLayout似乎是这个任务的大了一点。为什么不是简单的GridLayout? – Ray
GridLayout产生相同的结果。 –
尝试在EDT上创建GUI。在主要:'SwingUtilities.invokeLater(新的Runnable(){公共无效的运行(){主测试1 =新的主要();}});' – Marco13