JPanel забывает свою позицию - PullRequest
0 голосов
/ 23 апреля 2011

У меня есть JPanel, который должен быть расположен.Я пытался использовать setBounds в конструкторе панелей, но это не сработало.Кажется, что границы забываются, когда я вызываю paintComponent.

public class Panel extends JPanel {

    public Panel() {

        setBounds(120,100,20,300);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        // Prints out (0,0)
        System.out.println("Location: " + getLocation());
        g.drawOval(0,0, 60, 60);
    }

}

Ответы [ 2 ]

3 голосов
/ 23 апреля 2011

В Swing позиционирование компонента редко определяется самим компонентом.Обычно это определяется LayoutManager контейнера (на который, в свою очередь, влияет его собственный менеджер макета контейнера).

Обоснование заключается в том, что визуальное позиционирование не является "делением иЗавоевать "тип действия: позиционирование одного компонента влияет на позиционирование других компонентов, поэтому вам нужен своего рода" центральный орган позиционирования ", AKA: менеджер компоновки.

3 голосов
/ 23 апреля 2011

Чтобы использовать абсолютное позиционирование (ничего, что я бы порекомендовал, за исключением очень редких случаев), вам необходимо удалить менеджер компоновки родителей, вызвав setLayout(null); в родительском контейнере:

getContentPane().setLayout(null);
getContentPane().add(new Panel());
...