0

我知道不建议使用绝对定位,但我需要随机分散显示我的标签以及随机更改它们的位置。我已经研究过如何使用 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);
}

}

任何帮助找出问题所在,将不胜感激。

4

3 回答 3

1

以下代码显示了流布局中的标签,当我使用 setLayout(null) 时,它显示一个空白框。

布局管理器设置组件的大小和位置。

如果您不使用布局管理器,那么您负责设置每个组件的sizelocation

通常我会将大小设置为等于 components preferred size

另外,您是否显示了随机生成的 x/y 值?也许这些值大于面板的大小。

当我使用 setLayout(null) 它显示一个空白框。

什么布局设置为空?框架的面板。您的代码没有使用上述方法。发布您用来导致问题的代码。我们不想猜测您可能会或可能不会做什么。

于 2017-04-19T20:40:43.480 回答
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.setVisible(true);
于 2019-06-11T16:13:19.700 回答
0

感谢@CasparNoree ...建议的答案是从一开始就初始化Japnel:

JPanel pane = new JPanel(null);
于 2017-04-19T21:30:09.973 回答