为什么setLocation()没有移动我的标签?

时间:2010-09-12 16:51:15

标签: java swing layout-manager

我有以下代码,我尝试将JLabel放在JFrame的自定义位置。

public class GUI extends JFrame 
{

    /**
     * 
     * @param args
     */
    public static void main(String args[]) 
    {
        new GUI();
    }
    /**
     * 
     */
    public GUI() 
    {
        JLabel addLbl = new JLabel("Add: ");
        add(addLbl);
        addLbl.setLocation(200, 300);
        this.setSize(400, 400);

        // pack();
        setVisible(true);
    }
}

它似乎没有移动到我想要的地方。

2 个答案:

答案 0 :(得分:25)

问题是面板的LayoutManager正在为您设置标签的位置。

您需要做的是将布局设置为null:

public GUI() {
    setLayout(null);
}

这将使框架不会尝试自行布局组件。

然后在标签上拨打setBounds(Rectangle)。像这样:

addLbl.setBounds(new Rectangle(new Point(200, 300), addLbl.getPreferredSize()));

这应该将组件放在您想要的位置。

然而,如果您没有一个非常好的理由自己布置组件,通常最好使用LayoutManagers为您工作。

Here是开始使用LayoutManager s。

的精彩教程

如果你必须没有LayoutManager here,这是一个很好的教程,无需一个人。

答案 1 :(得分:0)

您将位置代码放在框架下,它会起作用但是如果您希望它可以正常工作 将位置代码放在run while循环中。这就是我做的事情,但它确实有效。