我知道不建议使用绝对定位,但是我需要显示我的标签随机分散以及随机更改其位置。我已经研究了如何使用setbounds,但似乎不起作用。以下代码显示了流程布局中的标签,当我使用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);
}
这是扩展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);
}
}
找出问题是什么,将不胜感激。
以下代码在流布局中显示标签,当我使用setLayout(null(时,它显示了一个空白框架。
布局管理器设置了组件的大小和位置。
如果您不使用布局管理器,则负责设置每个组件的size
和location
。
通常,我将大小设置为等于组件preferred size
。
另外,您是否显示了随机生成的X/Y值?也许值大于面板的大小。
,当我使用setLayout(null(时,它显示了一个空白帧。
将哪种布局设置为null?框架面板。您的代码不使用上述方法。发布您用于引起问题的代码。我们不想猜测您可能会或可能不做什么。
感谢@casparnoree ...建议的答案是从一开始就初始化Japnel:
JPanel pane = new JPanel(null);
将布局设置为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.setVisible(true);