Question

Dans mon application GUI, j'ai plusieurs JPanels qui sont instanciées à différents points pendant le déroulement de mon programme, et certaines actions ramènerai un d'entre eux à afficher dans une fenêtre de défilement:

mViewport.setViewportView(currentPanel);

Le problème est que mes panneaux sont faits en utilisant Layouts Sac de grille, et le comportement de c'est de se centrer dans le JScrollPane est à l'intérieur de. Cela rend l'interface air bizarre.

Quelqu'un sait d'un moyen de forcer un panneau de mise en page de sac de grille pour aligner en haut à gauche?

Merci!


EDIT

Notez que là, je me interroge sur l'alignement de l'ensemble du panneau dans son panneau de défilement, pas sur les composants à l'intérieur du panneau.

Était-ce utile?

La solution 2

J'ai trouvé une solution à ma propre question après quelques bidouiller:

poids de réglage semble être en mesure d'influer sur l'alignement des composants du JPanel pour lesquels la GridBagLayout a été utilisé. Cependant, il n'a pas eu d'effet sur l'alignement de la JPanel dans le JScrollPane.

J'ai trouvé une solution assez simple, ce qui est de pas mettre le JPanel directement à l'intérieur de la JScrollPane, comme je faisais avec mon code précédent:

if (currentPanel != mCurrentPanel)
{
    mViewport.setViewportView(currentPanel);
}

... mais au lieu de mettre un JPanel « extérieur » à l'intérieur du JScrollPane et définir que d'utiliser un FlowLayout. Puis, quand je veux changer de panneaux, je retire l'ancien et placer le panneau dans le panneau « externe ».

if (currentPanel != mCurrentPanel)
{
    if (mCurrentPanel != null)
    {
        mOuterPanel.remove(mCurrentPanel);
    }
    mCurrentPanel = currentPanel;
    mOuterPanel.add(mCurrentPanel);
}

Cette approche a fonctionné plutôt bien, parce que cela signifiait que je ne devais effectuer des changements dans une classe, au lieu de chacun des nombreux panneaux que j'avais.

Autres conseils

Vous devez définir les poids (dans le GridBagConstraints) sur un ou plusieurs des composants à l'intérieur de votre panneau. Cela a pour effet de « pousser » les composants à prendre plus de l'espace disponible (sans poids, les composants ne choisiront ce dont ils ont besoin, et le panneau sera centré dans l'espace disponible).

Si vous voulez aligner les composants en haut à gauche de la fenêtre de défilement, définissez le poids y de composant inférieur à 1,0, et définir x poids de l'extrême droite composant à 1.0.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top