Я нашел решение своего собственного вопроса после некоторой путаницы:
Установка весов, по-видимому, может влиять на выравнивание компонентов в 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);
}
Этот подход работал довольно хорошо, потому что это означало, что я должен был произвести изменения только в одном классевместо каждой из множества панелей, которые у меня были.