Java swing GUI绝对定位

时间:2017-04-19 20:39:28

标签: java swing user-interface setbounds

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

}

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

3 个答案:

答案 0 :(得分:1)

  

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

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

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

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