Подтвердить что ты не робот

Почему setLocation() не переносит мой ярлык?

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

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

4b9b3361

Ответ 1

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

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

public GUI() {
    setLayout(null);
}

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

Затем вызовите setBounds(Rectangle) на ярлыке. Например:

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

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

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

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

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

Ответ 2

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