1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
   | public class TScrollPane implements ActionListener {
 
	JFrame frame;
	JScrollPane pane;
	JPanel panel;
	int labelId;
	int posx;
	int posy;
 
	public void createAndShow() {
 
		// creation de la frame
		frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
		// creation du panel
		panel = new JPanel();
		panel.setLayout(null);
 
		// creation du scroll pane
		pane = new JScrollPane(panel);
		pane.setPreferredSize(new Dimension(300,300));
 
		// le bouton pour ajouter des composants dans le panel
		JButton button = new JButton("Add Component");
		button.addActionListener(this);
 
		// on affiche la frame
		frame.getContentPane().add(pane, BorderLayout.CENTER);
		frame.getContentPane().add(button, BorderLayout.WEST);		
		frame.pack();
		frame.setVisible(true);
 
	}
 
	public void actionPerformed(ActionEvent e) {
		// ajout du nouveau label dans le panel
		JLabel label = new JLabel("New Label "+labelId++);
		label.setBounds(posx, posy, 100, 30);				
		panel.add(label);
 
		// on previent le scrollpane qu'il doit se remettre a jour
		panel.setPreferredSize(new Dimension(posx+100, posy+30)); 
		panel.revalidate();
 
		// on demande le redessin
		pane.repaint();
 
		// position du prochain label
		posx+=30;
		posy+=30;
	}
 
	public static void main(String[] args) {
		new TScrollPane().createAndShow();
 
	}
} |