2010-07-16 3 views
2

Je crée un composant Swing personnalisé qui hérite de JPanel.Obtention d'un comportement de dimensionnement correct dans un composant Swing personnalisé

Quelle est la bonne façon de passer outre/mettre en œuvre les différentes méthodes de dimensionnement (getPreferredSize, setPreferredSize, getMinimumSize etc.) afin d'obtenir un « bon comportement », en particulier en ce qui concerne:

  • Travailler avec une présentation différente gestionnaires
  • correctement lorsque setPreferredSize Behaving() est appelée
  • Réagissant de façon appropriée lorsqu'une frontière est réglée par setBorder()

Répondre

2

Do not i hériter de JPanel sauf si votre composant est un composite de plusieurs sous-composants. Dans la plupart des cas, l'héritage de JComponent est suffisant.

En ce qui va ... Redimensionnement override getPreferredSize, getMinimumSize et getMaximumSize méthodes pour obtenir un comportement approprié dans les gestionnaires de mise en page.

Si votre composant est un composite de sous-composants, dans la plupart des cas, la taille préférée est déjà définie par la combinaison de vos sous-composants afin que vous n'ayez pas besoin de surcharger celui-ci.

+0

Merci! On dirait que je peux directement hériter de JComponent dans certains cas, dans d'autres cas j'ai un composite donc j'ai besoin de JPanel. Existe-t-il des instructions sur la façon d'implémenter getPrefferedSize, getMinimumSize etc? La raison principale est que l'interaction entre ceux-ci et setPreferredSize, setBorder etc. semble potentiellement très complexe ..... – mikera

+0

C'est ce que l'API JComponent dit: "Si le preferredSize a été mis à une valeur non nulle, il suffit de le retourner. La méthode getPreferredSize du délégué de l'interface utilisateur renvoie une valeur non nulle, puis la renvoie, sinon, elle se rapporte au gestionnaire de disposition du composant. Mais IMO qui dépend beaucoup de LAF. Je suggère donc d'implémenter des tailles dans les délégués de votre interface utilisateur puis de les déléguer aux délégués de l'interface utilisateur :) En ce qui concerne les bordures, les trois tailles doivent inclure la taille de la bordure, donc ne vous inquiétez pas. –

+1

Voici un très bon article sur les composants personnalisés écrits par Kirrill: http://today.java.net/article/2007/02/19/how-write-custom-swing-component –

0

Bien que plutôt ennuyeux: cela dépend, sur le layoutmanager dans ce cas. Habituellement, le gestionnaire de mise en page peut être utilisé avec des constantes pour obtenir une bonne mise en page. J'ai utilisé GridBagLayout, et après m'être habitué, j'ai trouvé que ça fonctionnait plutôt bien en utilisant GridBagConstraint pour chaque composant. Parfois, un bon concepteur visuel d'interface utilisateur peut aussi aider, comme celui de Netbeans, ou vous pouvez envisager un payé comme Swing Designer ou JFormDesigner. Peut vous faire gagner du temps avec les pixels.

+0

Cool, merci pour l'info! J'ai également trouvé MigLayout très utile dans ce domaine ..... – mikera

Questions connexes