2010-08-25 21 views
3

Je ne parviens pas à afficher un composant JComponent dans un JPanel sur un JFrame.Affichage d'un composant JComponent dans un JPanel sur un JFrame

Ce qui suit ne fonctionne pas.

JComponent component = ... 
panel.add(component, BorderLayout.CENTER); 
frame.add(panel, BorderLayout.CENTER); 

Mais si j'ajoute le JComponent à la JFrame [comme frame.add(component, BorderLayout.CENTER);], il affiche le contenu.

Toutes les idées

Répondre

5

Une mise en page par défaut de JPanel est un FlowLayout de sorte que vous ne devez pas spécifier le centre du panneau.

simplement:

panel.add(component); 

Sinon, faites:

panel.setLayout(new BorderLayout()); 
panel.add(component, BorderLayout.CENTER); 
+0

Merci Justin. C'est ce que j'ai fait. Mon problème vient quand j'essaye d'ajouter le panneau au JFrame comme ceci: frame.add (panel, BorderLayout.CENTER) ;. Il n'affiche pas le composant. – walters

+0

Oui, Justin. Ça a marché. Merci. – walters

+0

@wal, donc votre premier commentaire n'est pas valide alors? – jjnguy

2

Par défaut, un JComponent n'a pas une taille préférée.

Par défaut, un JPanel utilise un FlowLayout. Lorsque vous ajoutez un composant au panneau, il respecte la taille préférée du composant, qui est 0, de sorte que vous ne le voyez pas.

Par défaut, le panneau utilisé comme panneau de contenu d'un JFrame utilise un BorderLayout. Ainsi, lorsque vous ajoutez un composant au volet contenu de l'image, le composant est automatiquement redimensionné pour remplir l'espace disponible sur le cadre.

La solution consiste à donner à votre composant une taille préférée, puis à l'utiliser sur n'importe quel panneau avec n'importe quel gestionnaire de disposition.