Проблема с компоновкой Java Swing - PullRequest
2 голосов
/ 12 февраля 2010

Я добавил дочернюю панель на родительскую панель с помощью метода parent.addTab (child) и добавил один JLabel на дочернюю панель, но метод setBounds не работает на дочерней панели. Этот JLabel показывается в одном месте. setBounds работает нормально в родительской панели. Что делать?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2010

Вам необходимо определить соответствующий менеджер раскладки для вашей дочерней панели. Например, если вы решили использовать BorderLayout, вы можете расположить ярлык в центре панели следующим образом:

JTabbedPane parent = new JTabbedPane();
JPanel child = new JPanel(new BorderLayout());

// Create label with centrally aligned text (default is left).
JLabel label = new JLabel("Hello, World", JLabel.CENTER_ALIGNMENT);

// Add label to center of the child panel.
child.add(label, BorderLayout.CENTER);

// Add child panel as a tab within parent JTabbedPane.
// The child panel will expand to fit the size of the tab.
parent.addTab("My Tab", child);

Для более гибкой компоновки рассмотрите использование GridBagLayout.

0 голосов
/ 12 февраля 2010

setBounds работает только для контейнеров, для которых установлен макет null. (Или для перемещения кадров на рабочем столе.)

Диспетчер компоновки

JPanel по умолчанию - FlowLayout, который размещает компоненты в горизонтальном порядке и перемещается в новую строку, когда ток заполнен (как текст на странице).

Использование макета null и setBounds не рекомендуется для размещения графического интерфейса пользователя - он очень хрупкий - слишком многое зависит от размера контейнера / фрейма, а также от размера, разрешения и настроек шрифта рабочего стола может легко сломать макет.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...