web-dev-qa-db-fra.com

Comment empêcher JTextFields dans une Java Swing BoxLayout de se développer?

J'ai un JPanel qui ressemble à ceci:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

...

panel.add(jTextField1);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton1);

panel.add(Box.createVerticalStrut(30));

panel.add(jTextField2);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton2);

... //etc.

Mon problème est que les JTextFields deviennent énormes verticalement. Je veux qu’ils ne soient assez hauts pour une seule ligne, car c’est tout ce que l’utilisateur peut saisir. Les boutons sont bons (ils ne se développent pas verticalement).

Existe-t-il un moyen d'empêcher le JTextFields de se développer? Je suis plutôt nouveau dans Swing, alors laissez-moi savoir si je fais tout horriblement mal.

20
Matthew
textField = new JTextField( ... );
textField.setMaximumSize( textField.getPreferredSize() );
40
camickr

Si vous voulez que la largeur continue à changer, maintenez-la simplement sur MAX INT. Alors...

 textField.setMaximumSize (
 nouvelle dimension (Integer.MAX_VALUE, textField.getPreferredSize (). height));
28
cbrown

Dans mon cas, j'ai besoin d'une combinaison de toutes les réponses pour que cela fonctionne correctement. Si je n'utilise pas de colle, elle n'est pas centrée verticalement; si je ne limite pas la taille maximale, elle s’étend verticalement; si je restreins la largeur et la hauteur, elle est trop petite, elle est juste assez large pour contenir le texte d’initialisation.

textField = new JTextField("Hello, world!");
textField.setMaximumSize(
    new Dimension(Integer.MAX_VALUE,
    textField.getPreferredSize().height));
Box box = Box.createVerticalBox();
box.add(Box.createVerticalGlue());
box.add(textField);
box.add(Box.createVerticalGlue());
1
damix911

définir la hauteur maximale. ou les placer dans une zone de défilement

0
Randy