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

2022-09-04 07:29:49

我有以下代码,我尝试将 a 放在 .JLabelJFrame

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);
    }
}

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


答案 1

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

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

public GUI() {
    setLayout(null);
}

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

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

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

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

但是,如果您没有真正的理由自己布置组件,那么使用对您有利的方法通常是一个更好的主意。LayoutManagers

这是一个关于开始使用 s 的优秀教程。LayoutManager

如果您必须没有布局管理器,那么这是一个很好的教程,无需布局管理器即可使用。


答案 2

您将位置代码放在框架下,它将起作用,但如果您希望它正常工作,请确保将位置代码放在运行同时循环中。这就是我为弄清楚它所做的,它的工作原理。


推荐