# JScrollPane in GridBagLayout



## Nick (11. Mai 2004)

Hi,
Ich moechte eine JScrollPane in mein JFrame einfuegen, allerdings verwende ich zum anordnen der Komponenten das GridBagLayout. Jedenfalls werden keine ScrollBalken angezeigt, scrollen kann man natuerlich auch nicht. Darf man im GridBagLayout keine JScrollPanes verwenden? Oder gibt es irgend eine anderer Loesung fuer das Problem?
MFG,
Nick


----------



## Mr. Floppy (11. Mai 2004)

herr ober, einmal code bitte


----------



## L-ectron-X (11. Mai 2004)

Doch das geht auch, Du musst aber, so fern nicht nicht geschehen, die GridBagConstraints-Objekte für die ScrollPane angeben. Eine JScollPane zeigt auch nur etwas an, wenn etwas drin ist, was gescrollt werden kann. 

```
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1;
gridBagConstraints.weighty = 1;
```
Damit wird so zu sagen die ScrollPane "aufgeblasen".
Ansonsten nimm doch einfach das BorderLayout und setze die ScrollPane in die Mitte (BorderLayout.CENTER).


----------



## Nick (15. Mai 2004)

Hallo, also ich hab mal den Quelltext eingefuegt, wie gesagt, von der JScrollPane ist nix zu sehen:

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

public class ScrollTest extends JFrame
{
	private GridBagLayout gbl = new GridBagLayout();
	private GridBagConstraints gbc;
	public ScrollTest()
  	{
    	super("JScrollPane");
    	JLabel header=new JLabel("Überschrift");
    	getContentPane().setLayout(gbl);
		addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
    	//Dialogpanel erzeugen
    	JPanel panel = new JPanel();
    	panel.setLayout(gbl);
    	for (int i = 1; i <= 100; ++i)
    	{ 
			JCheckBox checkBox=new JCheckBox("Frage " + i);
			gbc = makegbc(i, 0, 1, 1);
			gbc.fill = GridBagConstraints.NONE;
			gbl.setConstraints(checkBox, gbc);
    		panel.add(new JCheckBox("Frage " + i));
    	}
    	//JScrollPane erzeugen
    	JScrollPane scroll = new JScrollPane(panel);
    	scroll.setCorner(JScrollPane.UPPER_RIGHT_CORNER,new JLabel("1", JLabel.CENTER)    );
    	scroll.setCorner(JScrollPane.LOWER_RIGHT_CORNER,new JLabel("2", JLabel.CENTER)    );
    	
    	// headerLabel hinzufügen
		gbc = makegbc(0, 0, 1, 1);
		gbc.fill = GridBagConstraints.NONE;
		gbl.setConstraints(header, gbc);
		getContentPane().add(header);
    	    	
    	//JScrollPane zur ContentPane hinzufügen
		gbc = makegbc(1, 0, 3, 3);
		gbc.fill = GridBagConstraints.BOTH; 
		gbl.setConstraints(panel, gbc);
    	getContentPane().add(scroll);
  	}

  	public static void main(String[] args)
  	{
    	ScrollTest frame = new ScrollTest();
    	frame.setLocation(100, 100);
    	frame.setSize(300, 150);
    	frame.setVisible(true);
  	}
	public GridBagConstraints makegbc(int x, int y, int width, int height)
	{
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = x;
		gbc.gridy = y;
		gbc.gridwidth = width;
		gbc.gridheight = height;
		gbc.insets = new Insets(3, 3, 3, 3);
		return gbc;
	}
}
```


----------



## Beni (15. Mai 2004)

Du musst aber für das ScrollPane auch noch GridBagConstraints setzen:

anstelle von:
	
	
	
	





```
gbl.setConstraints(panel, gbc);
```
sollte es wahrscheinlich sein:
	
	
	
	





```
gbl.setConstraints(scroll, gbc);
```

mfg Beni


----------



## Nick (20. Mai 2004)

Ok, hab ich geaendert, geht trotzdem nicht. Noch andere Vorschlaege?


----------



## bygones (20. Mai 2004)

du musst die PreferredSize der ScrollPane setzen - per default nimmt sich die Scrollpane soviel platz wie sie zum anzeigen der componente braucht -> verkleinerst ihre size werden auch die scrollbalken angezeigt


----------

