Java GUI: о методе и содержании getContentPane()

В этом фрагменте кода:

JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension(175, 100));
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

Я вижу, что он создает новую метку и добавляет ее в объект JFrame frame. Но я хочу понять, что делает getContentPane(), и зачем мне это нужно?

Я читал этот API, но я все еще не понял.

Ответ 1

Каждый JPanel является контейнером, поэтому либо добавляется в панель, а затем добавляется в контейнер или напрямую использует add(component) или использует метод getContentPane().add, и добавляет компонент в контейнер в java 7 (я не знаю версию 6 есть проблема с этим или нет).

Ответ 2

Каждый контейнер верхнего уровня Swing (и JInternalFrame) имеет то, что называется JRootPane. Это отвечает за управление общим расположением окна.

enter image description here

Корневая панель имеет несколько уровней, одна из которых - панель содержимого. Когда вы добавляете что-то в фрейм (так как Java 5, я думаю), он автоматически добавляется в панель содержимого для вас, перед этим вам нужно было позвонить getContentPane().add(...) самостоятельно

Взгляните на Как использовать RootPanes

Ответ 3

В контейнере имеется несколько слоев. Вы можете представить слой как прозрачную пленку, которая накладывается на контейнер. В Java Swing слой, который используется для хранения объектов, называется панелью . Объекты добавляются на уровень панели содержимого контейнера .

Метод getContentPane() извлекает слой панели контента, чтобы вы могли добавить к нему объект. Панель содержимого - это объект, созданный средой Java. Вам не обязательно знать имя области содержимого, чтобы использовать его. Когда вы используете getContentPane(), объект панели содержимого затем подставляется туда, чтобы вы могли применить к нему метод.

Ответ 4

A JFrame - это головной компонент, который объединяется с другими подкомпонентами. С getContentPane() получает компонент, представляющий содержимое графического интерфейса пользователя. Например, JMenuBar помещается в другую область рядом с contentPane кадра.