2014-04-02 56 views
2

我试图显示图像(作为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的图像,一切都很好。将小尺寸图像(即元素)放置/添加到布局可能会带来一些问题。

+0

的GridBagLayout似乎是这个任务的大了一点。为什么不是简单的GridLayout? – Ray

+0

GridLayout产生相同的结果。 –

+0

尝试在EDT上创建GUI。在主要:'SwingUtilities.invokeLater(新的Runnable(){公共无效的运行(){主测试1 =新的主要();}});' – Marco13

回答

0

您正在使用wall作为图标。而wall是在try块中创建的,您甚至不会记录引发的异常。

问题可能在这里:也许你有一个异常(IOException)在图标创建时产生,你看不到它。


你可以尝试的JLabel构造public JLabel(Icon image),而不是空的构造

阿波罗

+0

听起来像评论;) – alex2410

+0

添加输出到catch块,一切都很好,图像处理。 (至少在这一点上)。顺便说一句,对于像21这样的小数值,一切都很好。感谢您的建议:) –

+0

对不起alex2410,但我没有enougth声望尚未评论问题...所以我做了一个答案=) – Apolo

相关问题