ajouter le composant scrollpane à un composite lorsque le panneau est plein (java)

Je suis en train de travailler sur java swing application et je suis ajoutant des composants dynamiquement dans un JPanel. Je veux mettre un JScrollPane sur ce panneau et seulement si le groupe est complet, nous pouvons voir ce composant scrollpane.

Comment puis-je faire sur cette :

 package add_button;
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 java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;
public class MyExample 
{
//Field members
static JPanel panel = new JPanel();
static Integer indexer = 1;
static List<JLabel> listOfLabels = new ArrayList<JLabel>();
static List<JTextField> listOfTextFields = new ArrayList<JTextField>();
public static void main(String[] args)
{       
//Construct frame
JFrame frame = new JFrame();
frame.setLayout(new GridBagLayout());
frame.setPreferredSize(new Dimension(990, 990));
frame.setTitle("My Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Frame constraints
GridBagConstraints frameConstraints = new GridBagConstraints();
//Construct button
JButton addButton = new JButton("Add");
addButton.addActionListener(new ButtonListener());
//Add button to frame
frameConstraints.gridx = 0;
frameConstraints.gridy = 0;
frame.add(addButton, frameConstraints);
//Construct panel
panel.setPreferredSize(new Dimension(600, 600));
panel.setLayout(new GridBagLayout());
panel.setBorder(LineBorder.createBlackLineBorder());
//Add panel to frame
frameConstraints.gridx = 0;
frameConstraints.gridy = 1;
frameConstraints.weighty = 1;
frame.add(panel, frameConstraints);
//Pack frame
frame.pack();
//Make frame visible
frame.setVisible(true);
}
static class ButtonListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent arg0) 
{       
//Clear panel
panel.removeAll();
//Create label and text field
JTextField jTextField = new JTextField();
jTextField.setSize(100, 200);
listOfTextFields.add(jTextField);
listOfLabels.add(new JLabel("Label " + indexer));
//Create constraints
GridBagConstraints textFieldConstraints = new GridBagConstraints();
GridBagConstraints labelConstraints = new GridBagConstraints();
//Add labels and text fields
for(int i = 0; i < indexer; i++)
{
//Text field constraints
textFieldConstraints.gridx = 1;
textFieldConstraints.fill = GridBagConstraints.HORIZONTAL;
textFieldConstraints.weightx = 0.5;
textFieldConstraints.insets = new Insets(10, 10, 10, 10);
textFieldConstraints.gridy = i;
//Label constraints
labelConstraints.gridx = 0;
labelConstraints.gridy = i;
labelConstraints.insets = new Insets(10, 10, 10, 10);
//Add them to panel
panel.add(listOfLabels.get(i), labelConstraints);
panel.add(listOfTextFields.get(i), textFieldConstraints);
}
//Align components top-to-bottom
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = indexer;
c.weighty = 1;
panel.add(new JLabel(), c);
//Increment indexer
indexer++;
panel.updateUI();
}
}
}
essayez de la mine de son travail ..
a) ne pas appeler setXXSize, jamais: stackoverflow.com/questions/7229226/... b) n'utilisez pas de updateUI dans le code de l'application c) ne pas utiliser setSize: à la fois la localisation et de dimensionnement est la seule tâche de la LayoutManager, dans votre cas, la GridBag, à l'appel n'a aucun effet

OriginalL'auteur Adel Bachene | 2012-08-12