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没有任何成功。在此先感谢您的帮助。
答案 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。