13

我有以下代码,我尝试将 aJLabel放在 a 上的自定义位置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);
    }
}

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

4

2 回答 2

27

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

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

public GUI() {
    setLayout(null);
}

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

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

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

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

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

是一个关于开始使用LayoutManagers 的很棒的教程。

如果你必须不去LayoutManager 这里是一个很好的教程去不去。

于 2010-09-12T16:56:10.550 回答
0

您将位置代码放在框架下,它会起作用,但如果您希望它确实起作用,请将位置代码放在运行 while 循环中。这就是我为弄清楚它所做的事情并且它有效。

于 2014-11-11T00:41:36.637 回答