Почему setLocation () не перемещает мой ярлык? - PullRequest
11 голосов
/ 12 сентября 2010

У меня есть следующий код, где я пытаюсь разместить 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);
    }
}

Кажется, он не двигается туда, куда я хочу.

Ответы [ 2 ]

25 голосов
/ 12 сентября 2010

Проблема в том, что LayoutManager панели устанавливает для вас местоположение метки.

Что вам нужно сделать, это установить макет в null:

public GUI() {
    setLayout(null);
}

Это сделает так, чтобы рамка не пыталась расположить компоненты самостоятельно.

Затем позвоните setBounds(Rectangle) на этикетке. Вот так:

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

Это должно разместить компонент там, где вы хотите.

Однако , если у вас нет действительно веской причины для самостоятельного размещения компонентов, обычно лучше использовать LayoutManagers, чтобы работать в вашу пользу.

Здесь - отличное руководство по началу работы с LayoutManager s.

Если вам нужно обойтись без LayoutManager , здесь - хороший урок для обхода без него.

0 голосов
/ 11 ноября 2014

Вы помещаете код местоположения под рамку, и он будет работать, но если вы хотите, чтобы он работал точно поместите код местоположения в цикл выполнения. Вот что я сделал, чтобы понять это, и это работает.

...