简体   繁体   中英

Why doesn't setLocation() move my label?

I have the following code where I try to place a JLabel in a custom location on 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);
    }
}

It doesn't seem to be moving to where I want it.

The problem is that the LayoutManager of the panel is setting the location of the label for you.

What you need to do is set the layout to null:

public GUI() {
    setLayout(null);
}

This will make it so the frame does not try to layout the components by itself.

Then call setBounds(Rectangle) on the label. Like so:

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

This should place the component where you want it.

However , if you don't have a really great reason to lay out the components by yourself, it's usually a better idea to use LayoutManagers to work in your favor.

Here is a great tutorial on getting started with using LayoutManager s.

If you must go without a LayoutManager here is a good tutorial for going without one.

You put the location code under the frame and it will work but if you want it to work for sure put the location code in a run while loop. That's what I did to figure it out and it works.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM