Java Swing GUI绝对定位



我知道不建议使用绝对定位,但是我需要显示我的标签随机分散以及随机更改其位置。我已经研究了如何使用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(时,它显示了一个空白框架。

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

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

通常,我将大小设置为等于组件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);

相关内容

  • 没有找到相关文章

最新更新