2010-09-05 7 views
1

J'essaie d'insérer un nouveau panneau avec un ensemble de taille minimale sur un formulaire existant. Malheureusement, après que je fais:Dispositions et tailles minimales

this.add(scrap); 
this.moveScrapCentre(scrap); // runs setLocation(...) 
this.revalidate(); 
this.repaint(); 

(où this: JPanel avec mise en page null, scrap: JPanel avec la mise en boîte et les enfants)

le scrap obtient redimensionnées à (0,0) - même si je mets à la fois minimale et préféré taille dans l'éditeur de propriété de Netbeans. Comment puis-je empêcher cela, en plus de forcer scrap.setSize(scrap.getPreferredSize())?

+0

Est-ce que cette question est liée à http://stackoverflow.com/questions/3644775? – trashgod

+0

@trashgod: Non, c'est pour les éléments réels, pas pour les espaceurs, j'ai mes espaceurs dans les mises en page appropriées. – viraptor

Répondre

1

"Bien que nous vous recommandons fortement d'utiliser des gestionnaires de disposition, vous pouvez effectuer la mise en page sans eux. En définissant la propriété de disposition d'un conteneur sur null, vous n'utilisez aucun gestionnaire de disposition. spécifier la taille et la position de chaque composant dans ce conteneur.Un inconvénient du positionnement absolu est qu'il ne s'ajuste pas bien lorsque le conteneur de niveau supérieur est redimensionné.Il ne s'ajuste pas bien aux différences entre les utilisateurs et les systèmes, tels que la police différente tailles et locales. "- Setting the Layout Manager

Addendum: Oups, j'ai mal lu la question. Il suffit de faire

this.setPreferredSize(new Dimension(w, h)); 

en utilisant vos valeurs souhaitées de w et h. Si this est un espaceur, la disposition ne devrait pas importer.

Addendum: En regardant encore plus près, la taille de scrap peut changer dynamiquement. Vous pouvez remplacer getPreferredSize() en conséquence. Comme vous utilisez le concepteur de l'interface graphique, votre panneau a une déclaration quelque chose comme ceci:

public class NewJPanel extends javax.swing.JPanel 

Vous pouvez ajouter la méthode requise dans la classe mais en dehors du code généré fois:

@Override 
public Dimension getPreferredSize() { 
    return new Dimension(w, h); 
} 

En plus: Le concepteur GUI est un aid qui suppose une compréhension du gestionnaire de disposition sous-jacent. Notez que vous devez l'utiliser pour chaque panneau, et de nombreuses mises en page sont assez straightforward. Je vois souvent l'utilisation du concepteur réservée aux panneaux nécessitant des mises en page plus complexes telles que GroupLayout et SpringLayout.

+0

@viraptor: plus ci-dessus. – trashgod

Questions connexes