Pourquoi mon Composite à l'intérieur d'un JScrollPane pas de défilement?

J'ai un JPanel (jaune) placé dans JScrollPane.

Pourquoi mon Composite à l'intérieur d'un JScrollPane pas de défilement?

Quand je tape du texte dans JTextPane, il redimensionne, mais la barre de défilement verticale est toujours pas active. yelowPanel.getSize() renvoie la même valeur qu'avant.`(Vous pouvez le voir sur redPanel).

Pourquoi mon Composite à l'intérieur d'un JScrollPane pas de défilement?

Alors, comment puis-je actualiser yellowPanel? Je veux panneau de défilement verticale.
J'ai essayé de:

panelCreating.revalidate();
panelCreating.invalidate();
panelCreating.repaint();

Fonctionne uniquement panelCreating.setPreferredSize(new Dimension(333, 777)); mais je ne sais pas quelle taille à définir. Cela dépend du contenu.

Il y a un petit exemple:

package swingtest;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
public class SwingTest extends JFrame {
public SwingTest() {
initComponents();
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new SwingTest().setVisible(true);
}
});
}
private JPanel panelCenter, panelCreating;
private JScrollPane scrollPaneCreating, scrollPaneCenter;
private JTextPane textPane1, textPane2;
private JButton button1;
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setMinimumSize(new Dimension(300, 300));
panelCreating = new JPanel();
panelCreating.setMinimumSize(new Dimension(160, 200));
panelCreating.setPreferredSize(new Dimension(160, 200));
scrollPaneCreating = new JScrollPane(panelCreating,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
textPane1 = new JTextPane();
textPane1.setText("a\na");
textPane2 = new JTextPane();
textPane2.setText("b\nb");
button1 = new JButton("+++");
panelCenter = new JPanel();
panelCenter.setBackground(Color.blue);
scrollPaneCenter = new JScrollPane(panelCenter);
//----------------- Left Panel Init -----------------------
panelCreating.setLayout(new GridBagLayout());
panelCreating.setBackground(Color.ORANGE);
panelCreating.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(0, 0, 4, 4);
c.anchor = GridBagConstraints.FIRST_LINE_START;
c.weightx = c.weighty = 0;
c.gridx = 0;
c.gridy = GridBagConstraints.RELATIVE;
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridheight = 1;
c.fill = GridBagConstraints.BOTH;
panelCreating.add(textPane1, c);
button1.addActionListener(new ActionListener() {
int height = 50;
@Override
public void actionPerformed(ActionEvent e) {
textPane1.setText(textPane1.getText() + "\na");
textPane1.setPreferredSize(new Dimension(150, height));
textPane2.setText(textPane2.getText() + "\nb");
textPane2.setPreferredSize(new Dimension(150, height));
height += 30;
panelCreating.revalidate();
panelCreating.repaint();
scrollPaneCreating.revalidate();
}
});
panelCreating.add(button1, c);
panelCreating.add(textPane2, c);
//-------------------------------------------------------
getContentPane().setLayout(new GridBagLayout());
c = new GridBagConstraints();
c.ipadx = c.ipady = 0;
c.insets = new Insets(0, 0, 0, 0);
c.weighty = 0;
c.gridheight = 1;
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.weightx = 0;
c.fill = GridBagConstraints.BOTH;
getContentPane().add(scrollPaneCreating, c);
c.gridx = 1;
c.gridy = 1;
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 1;
getContentPane().add(scrollPaneCenter, c);
}
}

Panneau jaune utilise également le GridBagLayout.
Désolé pour mon anglais

Pourquoi la barre de défilement horizontale activer lui-même lorsque les composants à l'intérieur seulement jamais pousser à la verticale? Veuillez inclure une sscce car il n'est pas clair ce que vous demandez (au moins pour moi).
désolé, je veux dire de barre de défilement verticale..
s'il vous plaît pouvez-vous modifier votre message avec le code de sscce.org la forme, car cela pourrait être la leçon pourquoi JScrollPane ne fonctionne pas en utilisant AbsoluteLayout, +1 pour documenter cette étrange question
Fait. J'ai utilisé uniquement le GridBagLayout
"en Fait.: Désolé, ce qui est fait? Je vois 2 demandes pour un SSCCE mais pas SSCCE.

OriginalL'auteur alaster | 2012-02-07