JPanel mit JScrollPane und FlowLayut

JavaEngel

Mitglied
Hallo,

momentan bin ich dabei eine Lösung auf folgendes Problem zu finden.

Ich habe ein JPanel welches mithilfe des FlowLayout ungefähr 50 Buttons verwaltet.
Logischerweise findet ein Umbruch am rechten JPanel-Rand statt. Der bewirkt das die übrigen Elemente die nicht in der Erstenreihe hineinpassen in die Zweite
reihe angezeigt werden. Dies findet immer so weiter statt bis alle bestmöglich untergebracht sind. Nun habe ich aber nicht 50 sondern 100 Buttons.

Das Problem ist, dass beim gleichgroßen JPane mit dem FlowLayout die unteren Elemente aus dem Ansichtsbereich verweisen werden. Sie werden korrekt hinzugefügt und der Umbruch findet auch statt, nur hat die Komponente keinen Platz für die unteren Elemente. Sie sind zwar da, aber können nicht angezeigt werden.

Ich habe versucht ein JSrollPane einzubauen, damit ich nach unten Scrollen kann. Dies gelingt mir aber nicht, da entweder das FlowLayout die Umbruchfunktion verliert oder die Elemente immer noch nicht unten angezeigt werden. Ich kann nicht nach unten scrollen! Das JPanel für die vielen Komponente kann sich im Laufe der Ausführung bezüglich der Größe verändern. Die JScrollPane soll selbstständig erkennen wenn es sinnvoll ist eine ScrollBar anzuzeigen.


Code:
import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class LayoutProblem extends JPanel implements Runnable {

	public LayoutProblem() {

		JButton jb[] = new JButton[100];

		for (int i = 0; i < 100; i++) {
			if (i < 10) {
				jb[i] = new JButton("0" + i);
			} else {
				jb[i] = new JButton("" + i);
			}

		}

		JPanel panel = new JPanel();
		panel.setLayout(new FlowLayout());

		for (int i = 0; i < 100; i++) {
			panel.add(jb[i]);
		}

		this.setLayout(new BorderLayout());
		this.add(BorderLayout.CENTER, panel);

	}

	static JFrame frame;

	public static void main(String[] args) {
		LayoutProblem lp = new LayoutProblem();

		frame = new JFrame();
		frame.setSize(600, 400);
		frame.setLocationRelativeTo(null);
		frame.add(lp);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);

		Thread t = new Thread(lp);
		t.run();

	}

	@Override
	public void run() {

		try {
			Thread.sleep(1500);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		int a = 0;

		while (true) {
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			frame.setSize((600 - a), 400);

			a = a + 10;

		}
	}

}

Bild:
javaProb.JPG


JarDatei:
http://rapidshare.com/files/162098733/javaProb.jar.html

P.S. Der Quellcode ist nur eine Minimalversion die zur Veranschaulichung meines Problems dienen soll.
 
Zurück