/ / Conserver la taille de textArea après avoir changé le robinet - java, swing, interface utilisateur, scroll, textarea

Conservez la taille de textArea après avoir changé le robinet - java, swing, interface utilisateur, scroll

J'ai une interface graphique simple avec plusieurs onglets comme celui-ci: Interface graphique

Le problème est que, après avoir rempli la zone de texte jusqu'au bas (console remplie) et changer d'onglet - cela casse complètement le balisage (fond cassé)

Voici l'exemple de code de textArea et de contraintes

JTextArea textArea = new JTextArea();
textArea.setEditable(false);
tabbedPanelOne.add(textArea);
CustomAppender.setTextArea(textArea);

gbc.fill = GridBagConstraints.BOTH;
gbc.anchor = GridBagConstraints.CENTER;
gbc.gridy++;
gbc.gridx = 0;
gbc.gridwidth = 5;
gbc.weightx = 1.0;
gbc.weighty = 10.0;

Font font = textArea.getFont();
float size = font.getSize() - 4.0f;
textArea.setFont(font.deriveFont(size));

textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
//textArea.setPreferredSize(new Dimension(500, 300));
layout.setConstraints(textArea, gbc);

/*
* Scrolls for TextArea
*/
JScrollPane scroll = new JScrollPane (textArea,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
tabbedPanelOne.add(scroll);
layout.setConstraints(scroll, gbc);

//textArea.setPreferredSize(new Dimension(500, 300)); fonctionne bien, mais désactive le scroller vertical.

Réponses:

0 pour la réponse № 1
layout.setConstraints(textArea, gbc);

Tout d'abord lorsque vous ajoutez un composant à un volet de défilementvous ne tenteriez jamais de définir des contraintes sur le composant. Un JScrollPane utilise son propre gestionnaire de disposition personnalisé. Vous ne faites donc rien de spécial lorsque vous ajoutez le composant à la fenêtre de visualisation du volet de défilement.

Cependant, la solution la plus simple consisterait à utiliser BorderLayout sur le panneau que vous ajoutez à l'onglet. Quelque chose comme:

JPanel top = new JPanel();
top.add(...);
JTextArea textArea = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane( textArea );
JPanel main = new JPanel( new BorderLayout() );
main.add(top, BorderLayout.PAGE_START);
main.add(scrollPane, BorderLayout.CENTER);

Maintenant, le panneau de défilement occupera tout l'espace disponible dans l'onglet et des barres de défilement apparaîtront si nécessaire.