Расположение сумки в виде сетки Java:избегая выравнивания по центру
-
21-09-2019 - |
Вопрос
В моем приложении с графическим интерфейсом у меня есть несколько JPanel, экземпляры которых создаются в разные моменты выполнения моей программы, и определенные действия приведут к отображению одного из них в панели прокрутки:
mViewport.setViewportView(currentPanel);
Проблема в том, что мои панели созданы с использованием макетов Grid Bag, и их поведение заключается в центрировании внутри JScrollPane, внутри которого они находятся.Из-за этого графический интерфейс выглядит странно.
Кто-нибудь знает способ заставить панель макета сумки-сетки выравниваться по левому верхнему углу?
Спасибо!
РЕДАКТИРОВАТЬ
Обратите внимание, что здесь я спрашиваю о выравнивании всей панели внутри панели прокрутки, а не о компонентах внутри панели.
Решение 2
После некоторых возни я нашел решение своего вопроса:
Установка весов, по-видимому, может повлиять на выравнивание компонентов внутри JPanel
для чего GridBagLayout
был использован.Однако на выравнивание это не повлияло. JPanel
в рамках JScrollPane
.
Я нашел довольно простое решение: нет положить JPanel
непосредственно внутри JScrollPane
, как я делал со своим предыдущим кодом:
if (currentPanel != mCurrentPanel)
{
mViewport.setViewportView(currentPanel);
}
...но вместо этого поставить "внешний" JPanel
внутри JScrollPane
, и установите его для использования FlowLayout
.Затем, когда я хочу переключить панели, я удаляю старую и помещаю панель внутри «внешней» панели.
if (currentPanel != mCurrentPanel)
{
if (mCurrentPanel != null)
{
mOuterPanel.remove(mCurrentPanel);
}
mCurrentPanel = currentPanel;
mOuterPanel.add(mCurrentPanel);
}
Этот подход работал довольно хорошо, поскольку означал, что мне нужно было вносить изменения только в один класс, а не на каждую из множества имеющихся у меня панелей.
Другие советы
Вам нужно будет установить веса (в GridBagConstraints
) на одном или нескольких компонентах внутри панели.Это приводит к тому, что компоненты «заставляют» занимать больше доступного пространства (без весов компоненты будут занимать только то, что им нужно, а панель будет центрирована в пределах доступного пространства).
Если вы хотите выровнять компоненты в левом верхнем углу панели прокрутки, установите вес y нижнего компонента на 1,0 и установите вес x самого правого компонента на 1,0.