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

rob*_*rob 11 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

jjn*_*guy 25

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

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

public GUI() {
    setLayout(null);
}
Run Code Online (Sandbox Code Playgroud)

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

然后打电话setBounds(Rectangle)给标签.像这样:

addLbl.setBounds(new Rectangle(new Point(200, 300), addLbl.getPreferredSize()));
Run Code Online (Sandbox Code Playgroud)

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

但是,如果您没有一个非常好的理由自己布置组件,那么通常使用LayoutManagers对您有利的工作更好.

是一个关于开始使用LayoutManagers 的好教程.

如果你必须离开LayoutManager 这里是一个很好的教程,没有一个去.

  • +1为了给他答案他的问题,但让他知道这不是一般的做事的好方法 (3认同)