为什么setLocation()不移动标签?


问题内容

我有以下代码,尝试将放在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);
    }
}

它似乎并没有移动到我想要的位置。


问题答案:

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

您需要将布局设置为null:

public GUI() {
    setLayout(null);
}

这样就可以使框架不会尝试自行布局组件。

然后调用setBounds(Rectangle)标签。像这样:

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

这应该将组件放置在所需位置。

但是 ,如果您没有很好的理由自己布置组件,那么通常最好使用它LayoutManagers来帮您忙。

是有关使用LayoutManagers
的出色教程。

如果您必须不带一个,LayoutManager
这里是一个不带一个的很好的教程。