#java #swing #jpanel
#java #swing #jpanel
Вопрос:
У меня есть JPanel, которая должна быть расположена. Я пытался использовать setBounds в конструкторе panels, но это не сработало. Кажется, что границы забываются, когда я вызываю 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);
}
}
Ответ №1:
В Swing позиционирование компонента редко определяется самим компонентом. Обычно это определяется LayoutManager контейнера (на который, в свою очередь, влияет менеджер компоновки его собственного контейнера).
Обоснование заключается в том, что визуальное позиционирование не является методом «разделяй и властвуй»: позиционирование одного компонента влияет на позиционирование других компонентов, поэтому вам нужен какой-то «центральный орган по позиционированию», ОН же: менеджер макета.
Ответ №2:
Чтобы использовать абсолютное позиционирование (я бы ничего не рекомендовал, за исключением очень редких случаев), вы должны удалить родительский менеджер компоновки, вызвав setLayout(null);
родительский контейнер:
getContentPane().setLayout(null);
getContentPane().add(new Panel());