JPanel mit JScollpane

SirWayne

Erfahrenes Mitglied
Hallo,
ich hab ein JPanel mit Nulllayout und einer Scrollpane, aber sobald ich das nulllayout setze wird diese Scrollpane nicht mehr angezeigt obwohl das panel größer ist ...hier ist mein code nicht sauber programmier war nur zum test gedacht
Code:
package test;

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

public class test extends JFrame
{
JPanel c;
JLabel l;
JLabel a;
int x=30;

	public test(String s)
	{
	super(s);
	setLayout(null);
	c=new JPanel();
	
	c.setBackground(Color.white);
	c.setLayout(null);
	
	init();
	
	JScrollPane sc=new JScrollPane(c);
	
	sc.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);     
	sc.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
	
	sc.setBounds(0,0,700,550);
	this.getContentPane().add(sc);
	
	setSize(700,700);
	setVisible(true);

	
	}
	
	public void init()
	{
		for(int i=0;i<40;i++)
		{
			l=new JLabel("Hallodsfggfgfgfgfdgfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff \n");
			
			l.setBounds(0,i*x,500,20);
			if(i%2==0)
			{
				l.setForeground(Color.red);
			}
			else
			{
				l.setForeground(Color.magenta);
			}
			c.add(l);
		

		}
	
	}
	
	public static void main(String args[])
	{
		test t= new test("Test");
	}
	
}
 
ja hab ich auch schon versuch-->klappt nicht.Sobal ich das null-layout verwende nimmt er nur noch die koordinaten von dem scrollpane ,d.d wenn ich die bound des scrollpanes verändere wird das panel auch so groß egal wie groß ich es setzte
 
Hallo,

wie kommst du drauf, dass das JPanel größer ist als die Scrollpane?
Also ich sehe nicht, dass du die Größe des JPanels einstellst. Damit ist das JPanel dann genau so groß wie die Scrollpane. Damit siehst du dann auch keine Scrollpane.
SetPreferredSize() bringt nur was, wenn du ein anderes Layout als das null-Layout hast. Falls ich jetzt was falsches gesagt hab, möge mich jemand berichtigen.

MFG

zEriX
 
natürlich ist mein panel größer wie die scrollpane i*30 und das 40 mal!!ähm ich seh mein label aber nur 10 mal und wie andere 30 mal sollten eigentlich durch scrollen zu sehen sein was aber nicht der falls ist nur wenn ich ein anderes layout verwendet, was wiederum zur folge hat dass ich meine labeks nicht unter einander sondern nur nebeneinander schreiben kann
und wie gesagt sobald ich das null-layout verwende bringt set size nichts....
 
Hallo Wayne,

schau mal hier:
Java:
import java.awt.Dimension;

import javax.swing.*;


public class NullLayoutTest extends JFrame {
	
	public NullLayoutTest() {
		super("NullTest");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setAlwaysOnTop(true);
		this.setLocationByPlatform(true);
		
		this.add(this.createScrollPane());
		
		this.pack();
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		new NullLayoutTest();
	}

	public JComponent createScrollPane(){
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setPreferredSize(new Dimension(700,700));
		
		for (int i = 0; i < 10; i++) {
			for (int j = 0; j < 10; j++) {
				JButton b = new JButton(i + " " + j);
				b.setBounds(i* 70, j * 70,70,70);
				panel.add(b);
			}
		}
		
		JScrollPane scrollPane = new JScrollPane(panel);
		scrollPane.setPreferredSize(new Dimension(70 * 5, 70 * 5));
		
		return scrollPane;
	}
}


Vg Erdal
 
Hallo,

natürlich ist mein panel größer wie die scrollpane i*30 und das 40 mal!
natürlich war dein JPanel nicht größer. Du hast zwar die Position deiner JLabel gesetzt, damit setzt du aber nicht die größe deines JPanels.
Es funktioniert jetzt, weil für das JPanel die preferredSize gesetzt wird. Der Viewport der ScrollPane hat ein Layout womit die größe des Objectes der in der Scrollpane liegt automatisch angepasst wird. Mit der preferredSize sagst du dann aus, dass Object auf jeden Fall so groß sein soll, egal was das Layout macht.
Da die preferredSize des JPanels jetzt 700x700 ist und damit größer als (70*5)x(70*5), siehst du die Scrollbars und siehst auch alle JLabel.

MFG

zEriX
 
Zurück