Question

J'écris un composant de sélection de fichier personnalisé. Dans mon interface utilisateur, l'utilisateur clique d'abord sur un bouton qui ouvre un JFileChooser ; lorsqu'il est fermé, le chemin absolu du fichier sélectionné est écrit dans un JTextField .

Le problème, c'est que les chemins absolus sont généralement longs, ce qui provoque l'agrandissement du champ de texte, ce qui rend son conteneur trop large.

J'ai essayé cela, mais ça n'a rien fait, le champ de texte est encore trop large:

fileNameTextField.setMaximumSize(new java.awt.Dimension(450, 2147483647));

Actuellement, lorsqu'il est vide, il fait déjà 400 pixels de long, en raison de GridBagConstraints qui lui est associé.

J'aimerais que ce soit comme des champs de texte dans les pages HTML, qui ont une taille fixe et ne s'agrandissent pas lorsque l'entrée est trop longue.

Alors, comment définir la taille maximale d'un JTextField ?

Était-ce utile?

La solution

Cela peut dépendre du gestionnaire de disposition dans lequel se trouve votre champ de texte. Certains gestionnaires de disposition se développent et d'autres non. Certains ne se développent que dans certains cas, d'autres toujours.

Je suppose que vous faites

filedNameTextField = new JTextField(80); // 80 == columns

Si tel est le cas, pour la plupart des mises en page raisonnables, le champ ne doit pas changer de taille (au moins, il ne devrait pas s'agrandir). Les gestionnaires de disposition se comportent souvent mal lorsqu'ils sont placés dans des JScrollPane .

D'après mon expérience, essayer de contrôler les tailles via setMaximumSize et setPreferredWidth et ainsi de suite est au mieux précaire. Swing a décidé par lui-même avec le gestionnaire de disposition et vous ne pouvez rien y faire.

Cela étant dit, le problème que vous rencontrez n’a pas eu lieu, ce qui me porte à croire que le recours judicieux à un gestionnaire de mise en page permettra de résoudre le problème.

Autres conseils

J'ai résolu ce problème en définissant la largeur maximale sur le conteneur du champ de texte, à l'aide de setMaximumSize .

Selon la réponse de davetron, il s'agit d'une solution fragile, car le gestionnaire de disposition peut ne pas tenir compte de cette propriété. Dans mon cas, le conteneur est le plus haut, et dans un premier test cela a fonctionné.

Ne définissez aucune des tailles dans le champ de texte. Définissez plutôt la taille de la colonne sur une valeur différente de zéro via setColumns ou en utilisant le constructeur avec l'argument de la colonne.

Ce qui se passe, c'est que la taille préférée indiquée par JTextComponent lorsque les colonnes ont la valeur zéro est la quantité totale d'espace requis pour le rendu du texte. Lorsque colonnes est défini sur une valeur autre que zéro, la taille préférée est la taille nécessaire pour indiquer autant de largeurs de colonne standard. (pour une police à pas variable, il est généralement proche de la taille du minuscule «m»). Lorsque les colonnes sont définies sur zéro, le champ de texte demande autant d’espace qu’il peut en obtenir et étend tout le conteneur.

Étant donné que vous l'avez déjà dans un GridBagLayout avec un remplissage, vous pouvez probablement définir les colonnes sur 1 et laisser le remplissage l'étirer en fonction des autres composants, ou d'un autre nombre suffisamment faible.

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