JScrollPane in GridBagLayout

  • Themenstarter Themenstarter Nick
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
N

Nick

Gast
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
 
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.
Code:
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).
 
Hallo, also ich hab mal den Quelltext eingefuegt, wie gesagt, von der JScrollPane ist nix zu sehen:
Code:
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;
	}
}
 
Du musst aber für das ScrollPane auch noch GridBagConstraints setzen:

anstelle von:
Code:
 gbl.setConstraints(panel, gbc);
sollte es wahrscheinlich sein:
Code:
 gbl.setConstraints(scroll, gbc);

mfg Beni
 
Ok, hab ich geaendert, geht trotzdem nicht. Noch andere Vorschlaege?
 
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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben