Расположение сумки в виде сетки Java:избегая выравнивания по центру

StackOverflow https://stackoverflow.com/questions/2099227

Вопрос

В моем приложении с графическим интерфейсом у меня есть несколько 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top