JavaSwing GridLayout不会添加JLabel

时间:2016-12-13 20:30:50

标签: java

JLabel imagine_hearth = new JLabel(new ImageIcon( new ImgUtils().scaleImage(35,35,"health.png")));
    JLabel imagine_bullet = new JLabel(new ImageIcon( new ImgUtils().scaleImage(35,35,"bullet.jpg")));
    JLabel player_icon = new JLabel();
    Board2 b2 = new Board2();
    JPanel stats = new JPanel();
    stats.setSize(100,450);
    stats.setLayout(new GridLayout(12,2));
    for(i=1; i<5 ; i++)
    {
        stats.add(new JLabel("Player " + i));
        player_icon.setIcon(new ImageIcon( new ImgUtils().scaleImage(35,35,pioni[i-1])));
        stats.add(player_icon,BorderLayout.CENTER);
        stats.add(new JLabel("X" + pl[i-1].nr_lives));
        stats.add(imagine_hearth,BorderLayout.CENTER);
        stats.add(new JLabel("X" + pl[i-1].nr_bullets));
        stats.add(imagine_bullet,BorderLayout.CENTER);
    }

this is how it looks 我刚刚开始用java编码,我遇到了JLabel网格布局的问题。正如你在上面的代码中看到的,我试图制作一个带有文本和图片的矩阵12X2,但程序只加载最终条目的图片,我不知道为什么。我尝试了几个选项,比如GridBagLayout没有任何成功。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

JLabel只能拥有1位父亲并且位于1个位置。因此,当您再次添加它时,从旧位置删除,然后添加到新位置。这与布局无关,并且是所有Swing组件中不变的行为。要解决这个问题,您需要制作几个JLabel个。不过,您仍然可以分享ImageIcon

ImageIcon imagine_hearth = new ImageIcon( new ImgUtils().scaleImage(35,35,"health.png"));
ImageIcon imagine_bullet = new ImageIcon( new ImgUtils().scaleImage(35,35,"bullet.jpg"));

<other code you had, *without player_icon*>
for(i=1; i<5 ; i++) {
    <loop code>
    JLabel player_icon = new JLabel(new ImageIcon( new ImgUtils().scaleImage(35,35,pioni[i-1])));
    stats.add(player_icon);
    <...>
    stats.add(new JLabel(imagine_hearth));
    <...>
    stats.add(new JLabel(imagine_bullet));
}

P.S。在纯Java代码中通常不鼓励使用下划线(尽管在低级网络等C风格的代码中通常可以使用下划线)。请参阅Java Code Conventions