【问题标题】:Adding images to cells in a GridLayout将图像添加到 GridLayout 中的单元格
【发布时间】:2013-01-11 14:38:19
【问题描述】:

试图创建一个gridLayout并用图像填充它,哪里出错了?

ImageIcon grassIcon = new ImageIcon("images/grass_tile.jpg"); 
JPanel panel = new JPanel(new GridLayout(haps,snaps,0,0));

JLabel labels[] = new JLabel[(haps*snaps)];

for (int i =  0; i < haps*snaps; i++)
{
    labels[i] = new JLabel(grassIcon);
    panel.add(labels[i]);
}

frame.add(panel);

【问题讨论】:

  • 你看到了什么?错误 ?你调用 frame.pack() 吗?
  • frame.pack() 完成了这项工作!但是如何以及为什么?到文档!!!谢谢。
  • @JesperTuborgMadsen :至于为什么会发生,在 Swing 中创建组件时,它是无效的,即它的有效属性是假的。当组件的宽度、高度、位置和内容都已确定时,该组件就被认为是有效的。这通常通过直接或间接调用他们的 validate() 方法来完成。当我们在容器上调用 validate() 时,它将通过调用其 doLayout() 方法来验证容器(如果它无效),该方法通常会调用 LayoutManager。
  • Continued... : 现在每个放置在这个容器上的孩子都会被递归地验证,这样整个树就会被布局并且变得有效。这里调用@987654323 @ 将组件的 invalid state 间接更改为 valid state。更多信息可以在这个thread上找到

标签: java swing loops grid-layout imageicon


【解决方案1】:

使用 frame.setVisible(true);

显示框架
ImageIcon grassIcon = new ImageIcon("images/grass_tile.jpg"); 
JPanel panel = new JPanel(new GridLayout(haps,snaps,0,0));

JLabel labels[] = new JLabel[(haps*snaps)];

for (int i =  0; i < haps*snaps; i++)
{
      labels[i] = new JLabel(grassIcon );
      panel.add(labels[i]);
}

frame.add(panel);
frame.pack();
frame.setVisible(true);

【讨论】:

    【解决方案2】:

    正如 ben75 所写,它需要 frame.pack(); 信任他!

    【讨论】:

      【解决方案3】:

      如果您的图像路径正确,请尝试检查它。或者,如果您真的可以使图像出现,则可以进行测试,尝试使其成为绝对路径。另外,请详细说明您的问题。

      【讨论】:

      • 框架中没有显示任何内容。但添加 frame.pack();像魅力一样工作。
      猜你喜欢
      • 2014-06-08
      • 1970-01-01
      • 2014-07-11
      • 2011-08-17
      • 2015-11-09
      • 2019-01-02
      • 2011-09-10
      • 1970-01-01
      • 2021-01-24
      相关资源
      最近更新 更多