# Problem mit ScrollbarPane



## Hi Fish (21. Feb 2007)

Hi,
ich will auf einem ScrollbarPane dynamisch Buttons und Labels darstellen, d.h. ich muss hinzufügen aber auch löschen können.

Allerdings schaffe ich es nichtmal im Betrieb etwas auf das Scrollpane zu zeichnen. Hab jetzt schon lange gesucht und viele Beispiele ausprobiert aber irgendwie klappt es nicht.

Wie kann ich nun etwas in das Scrollpane einfügen, und löschen? Muss ich mich noch um die Scrollbar kümmern oder wird das automatisch gemacht wenn mehr Daten als Anzeigeplatz vorhanden sind?

Bitte um Hilfe!
Gruß HiFish

Das Beispiel hier gibt z.B. einen Leeren Frame mit Scrollbar aus.

```
import javax.swing.*;
import java.awt.*;

public class sct extends JFrame{
	
	public sct()
	{
		super("Scrollpanetest");
		setSize(50,200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container pane=getContentPane();
		BorderLayout flow = new BorderLayout();
		pane.setLayout(flow);
		
		JScrollPane sc=new JScrollPane();
		sc.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		pane.add(sc,java.awt.BorderLayout.CENTER);
		
		JButton btn=new JButton("Hallo du");
		JLabel lbl=new JLabel("Testicus123");
		JPanel pnl=new JPanel(new GridLayout(10,1));
		
		pnl.add(btn);
		pnl.add(lbl);
		sc.add(pnl);
	}
	public static void main(String[] args)
	{
		sct test=new sct();
	}
}
```


----------



## André Uhres (21. Feb 2007)

sc.setViewportView(pnl);


----------



## Hi Fish (21. Feb 2007)

Funktioniert danke!


----------



## Hi Fish (22. Feb 2007)

Neues Problem ;-)

Wenn ich da jetzt 20 Buttons und Labels auf das Panel zeichne sollte das ja wie eine liste schön nach unten gehen.
Macht es auch! 
Allerdings nur ab und zu, ohne das ich was verändere macht das Programm manchmal eine Schöne Liste mit Scrollbar, oder quetscht alles in dem Sichtbaren Fenster zusammen. Wie kann ich das unterbinden oder was habe ich falsch gemacht?
Gruß HiFish


Einfach 10 mal ausführen und die unterschiedlichen Ergebnisse bestaunen:

```
import javax.swing.*;
import java.awt.*;
import java.util.*;


public class dynamic_btn_scb{

	private JFrame jFrame = null;  
	private JButton button;
	private JPanel panel,panel2,cpanel,scpanel;
	private JLabel lbl;
	private JScrollPane sc;
	
	public static void main(String agrs[])
	{
		dynamic_btn_scb test=new dynamic_btn_scb();
		test.doIt();
	}
	public void doIt()
	{
		ArrayList<JButton> btns=new ArrayList<JButton>();
		
 		for(int i=0;i<=20;i++)
		{
 			panel2 = new JPanel(new BorderLayout());
 			button = new JButton(i+1+"");
 			button.setPreferredSize(new Dimension(50,20));
 			button.setMaximumSize(new Dimension(20,20));
 			button.setMinimumSize(new Dimension(20,20));
 			lbl= new JLabel("Group");
 			
 			panel2.add(button, java.awt.BorderLayout.WEST);
 			panel2.add(lbl, java.awt.BorderLayout.CENTER);
 			scpanel.add(panel2);
 		
 			btns.add(button);
		}
 		scpanel.validate();
 		//sc.setViewportView(scpanel);
	}
	public dynamic_btn_scb()
    {
	    jFrame = new JFrame("Fenster");
	 
	    jFrame.setSize(50,300);
	    jFrame.setLocation(300,300);
	    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    
        cpanel = new JPanel(new BorderLayout());
        scpanel=new JPanel(new GridLayout(25,1));
        
        sc=new JScrollPane();
        sc.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		sc.setViewportView(scpanel);
		cpanel.add(sc);
        jFrame.getContentPane().add(cpanel);
	    jFrame.setVisible(true);
    }
}
```


----------



## André Uhres (22. Feb 2007)

Ersetze "scpanel.validate();"  durch:

```
jFrame.validate();
```


----------

