ScrollPane in JToolbar vs. ScrollPane in JPanel

MaBiGiga

Grünschnabel
Hallo zusammen,

ich will eine JToolbar innerhalb eines JPanel scrollbar machen.
Verwende ich kein JPanel und füge die Scrollbar direkt meinem JFrame hinzu funktioniert das auch, geh ich aber über das JPanel (diesen Weg brauche ich zwingend für meine Applikation) krieg ichs ums verr*** nicht hin... Ich seh den Wald einfach vor lauter Bäumen nicht.

Unten im Code das Problem in kurzform:

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.ScrollPaneConstants;

public class Test extends JPanel
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1802199483736051124L;

	public Test()
	{
		createPanel();
	}

	private void createPanel()
	{
		setPreferredSize(new Dimension(200, 60));

		JScrollPane scroller = new JScrollPane();
		JToolBar toolbar = new JToolBar();
		scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
		toolbar.setFloatable(false);
		toolbar.setPreferredSize(new Dimension(200, 60));
		toolbar.add(new JButton("123"));
		toolbar.add(new JButton("456"));
		add(toolbar);
		scroller.setViewportView(this);

	}

	public static void main(String[] args)
	{
		JFrame frm = new JFrame();

		JScrollPane scroller = new JScrollPane();
		JToolBar toolbar = new JToolBar();
		scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
		toolbar.setFloatable(false);
		toolbar.setPreferredSize(new Dimension(200, 60));
		toolbar.add(new JButton("123"));
		toolbar.add(new JButton("456"));
		scroller.setViewportView(toolbar);
		// frm.getContentPane().add(scroller, BorderLayout.NORTH);

		Test test = new Test();
		frm.getContentPane().add(test, BorderLayout.NORTH);

		frm.pack();
		frm.setVisible(true);
	}
}

Zeile 51 (auskommentiert) ist der Weg direkt über die JScrollbar der funktioniert (den kann ich aber nicht verwenden).

Zeile 53+54 beschreiben den Weg den ich gehen will, da gehts aber leider nicht.

Ich bitte um Hilfe.

Danke und Gruß
MaBi
 
Hi und Willkommen bei tutorials.de,

wenn ich das richtig verstehe, dann hast du lediglich in Zeile 34 den Fehler gemacht, dass du die Toolbar dem JPanel hinzufügst, allerdings nicht das ScrollPane. Demzufolge müsste folgendes den gewünschten Effekt bringen:
Java:
private void createPanel()
    {
        setPreferredSize(new Dimension(200, 60));
 
        JScrollPane scroller = new JScrollPane();
        JToolBar toolbar = new JToolBar();
        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
        toolbar.setFloatable(false);
        toolbar.setPreferredSize(new Dimension(200, 60));
        toolbar.add(new JButton("123"));
        toolbar.add(new JButton("456"));
        scroller.setViewportView(this);
        add(scroller); // scroller NICHT toolbar
    }

ps.: Bitte verwende die Java-Tags (siehe meine Signatur)

Gruß

Fabio
 
Hallo Fabio,

vielen Dank für die Antwort.

Dein Vorschlag funktioniert bei mir leider nicht, da ich eine Exception bekomme:

Exception in thread "main" java.lang.IllegalArgumentException: adding container's parent to itself

und zwar in Zeile 13 (in deinem Code)

Java:
 add(scroller);
 
Dann leite doch deine Klasse "Test" nicht von JPanel sondern von JScrollPane direkt ab. Dann brauchst du theroretisch nur noch die Toolbar hinzufügen. ;)
 
In meinem Beispiel Programm funktioniert das wunderbar, danke

In meiner Applikation allerdings habe ich es noch nicht hinbekommen.
Dort verwende ich den JGoodies LayoutManager FormLayout. Ich denke dass es dort irgendwo hackt, weil ich es im Minimalnachbau meiner GUI ohne das Layout hinbekommen hab^^.

Vielen Dank für den Tipp
Gruß
MaBi
 
Zurück