我知道不建议使用绝对定位,但我需要随机显示我的标签以及随机改变其位置。 我已经研究过如何使用setBounds但它似乎没有用。以下代码显示了Flow Layout中的标签,当我使用setLayout(null)时,它显示一个空白框架。
public class GUI extends JFrame{
device mobiles[];
device station;
JPanel pane= new JPanel();
public GUI()
{
setTitle("communication is Key");
setSize(1000, 1000);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pane.setBackground(Color.WHITE);
int x=0; int y=0;
mobiles= new device[10];
for (int i = 0; i < 10; i++) {
x=randInt();
y=randInt();
mobiles[i]= new device(1,x,y);
pane.add(mobiles[i]);
}
x=randInt();
y=randInt();
station = new device(0,x,y);
pane.add(station);
this.add(pane);
}
这是班级&#34;设备&#34;这扩展了JLabel
public class device extends JLabel{
ImageIcon mob = new ImageIcon("mob.png");
ImageIcon tow = new ImageIcon("tower.png");
public device(int num, int x, int y)
{ if(num==1)
this.setIcon(mob);
else this.setIcon(tow);
this.setBounds(x, y, 3, 7);
}
}
任何帮助找出问题所在,都将不胜感激。
答案 0 :(得分:1)
以下代码显示了Flow Layout中的标签,当我使用setLayout(null)时,它显示一个空白框架。
布局管理器设置组件的大小和位置。
如果您不使用布局管理器,那么您有责任设置每个组件的size
和location
。
通常我会将大小设置为等于组件preferred size
。
另外,您是否显示了随机生成的x / y值?也许这些值大于面板的大小。
当我使用setLayout(null)时,它会显示一个空白框架。
什么布局设置为null?框架的面板。您的代码不使用上述方法。发布用于导致问题的代码。我们不想猜测你可能做什么或不做什么。
答案 1 :(得分:0)
感谢@CasparNoree ...建议的答案是从一开始就初始化Japnel:
JPanel pane = new JPanel(null);
答案 2 :(得分:0)
将布局设置为null时,可以使用坐标手动设置边界。
JFrame jf = new JFrame);
Jpanel p = new JPanel();
JButton jb = new JButton();
// this is where you make it so setting the bounds actually does something
p.setLayout(null);
jb.setBounds(100,100,100,100);
p.add(jb);
jf.add(p);
jf.show();