java grid bag layout: evitando allineamento al centro
-
21-09-2019 - |
Domanda
Nella mia applicazione GUI, ho diversi JPanels che vengono istanziati in vari punti durante l'esecuzione del mio programma, e determinate azioni farò uno di loro da visualizzare in un riquadro di scorrimento:
mViewport.setViewportView(currentPanel);
Il problema è che i miei pannelli sono fatte usando griglia Bag layout, e il comportamento di che è quello di centrare sé all'interno della JScrollPane è dentro di. Questo rende le GUI guardano strano.
Qualcuno sa di un modo per forzare un pannello di layout grid bag in alto a sinistra align?
Grazie!
Modifica
Si noti che qui sto chiedendo circa l'allineamento di tutto il pannello nel suo riquadro di scorrimento, non sui componenti all'interno del pannello.
Soluzione 2
Ho trovato una soluzione alla mia domanda dopo un po 'armeggiare intorno:
pesi Impostazione sembra essere in grado di influenzare l'allineamento dei componenti all'interno del JPanel
che è stata fatta la GridBagLayout
. Tuttavia, non ha avuto un effetto sul l'allineamento del JPanel
all'interno del JScrollPane
.
Ho trovato una soluzione piuttosto semplice, che è quello di non mettere il JPanel
direttamente all'interno del JScrollPane
, come facevo con il mio codice in precedenza:
if (currentPanel != mCurrentPanel)
{
mViewport.setViewportView(currentPanel);
}
... ma invece di porre JPanel
"esterna" all'interno del JScrollPane
, e impostare che di utilizzare una FlowLayout
. Poi quando voglio cambiare pannelli, rimuovo il vecchio e posizionare il pannello all'interno del pannello "esterno".
if (currentPanel != mCurrentPanel)
{
if (mCurrentPanel != null)
{
mOuterPanel.remove(mCurrentPanel);
}
mCurrentPanel = currentPanel;
mOuterPanel.add(mCurrentPanel);
}
Questo approccio ha funzionato piuttosto bene, perché significava ho avuto solo per effettuare le modifiche in una classe, invece di ciascuno dei molti pannelli che ho avuto.
Altri suggerimenti
È necessario impostare i pesi (in GridBagConstraints
) su uno o più dei componenti all'interno del vostro pannello. Questo ha l'effetto di "spingere" i componenti da occupare più dello spazio disponibile (senza pesi, i componenti saranno solo prendere ciò di cui hanno bisogno, e il pannello sarà centrato entro lo spazio disponibile).
Se si voleva per allineare i componenti in alto a sinistra del riquadro di scorrimento, impostare il peso y del componente di fondo a 1,0, e impostare il peso x il più a destra del componente a 1,0.