# JScrollPane nur in vertikaler Richtung



## jawn (13. Mai 2008)

Hi

ich suche nach einer Möglichkeit eine JScrollPane zu erzeugen die nur in vertikaler Richtung scrollt und in Horizontaler Richtung sie soweit ausdehnt um das JPanel, welches ich in sie rein stecke, in voller Breite darzustellen.

Jemand eine Idee?
thx


----------



## SlaterB (13. Mai 2008)

kommt auf dein Programm an, man könnte auch behaupten, dass das eh schon so ist:


```
public class TestGUI
    extends JFrame
{

    public TestGUI()
    {

        DefaultListModel defaultlistmodel = new DefaultListModel();
        defaultlistmodel.addElement("Test Test Test Test Test Test Test Test Test ");
        for (int i = 0; i < 100; i++)
        {
            defaultlistmodel.addElement("Test");
        }

        JList liste = new JList(defaultlistmodel);
        JScrollPane liste_scrollPane = new JScrollPane(liste);

        JPanel listen_Panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        listen_Panel.add(liste_scrollPane);

        add(listen_Panel, BorderLayout.WEST);
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }


    public static void main(String[] args)
    {
        new TestGUI();
    }
}
```

wenn du da die erste breite Zeile auskommentierst oder auch nicht, dann ist das JScrollPane unterschiedlich breit


--------

edit: mit JPanel:


```
public class TestGUI
    extends JFrame
{

    public TestGUI()
    {

        JPanel a = new JPanel();
        a.setLayout(new FlowLayout());
        a.add(new JButton("Aaaa"));
        a.add(new JButton("Bbbb"));
        a.add(new JButton("Cccc"));
        a.add(new JButton("Dddd"));

        JScrollPane sp = new JScrollPane(a);
        JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
        p.add(sp);

        add(p, BorderLayout.WEST);
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }


    public static void main(String[] args)
    {
        new TestGUI();
    }
}
```


----------



## jawn (15. Mai 2008)

Hi

erstmal danke für die Antwort. Ich hätte meine Frage vielleicht anders stellen sollen. Ich hab in meinem Programm links eine Liste und rechts ein Panel. Und ich möchte nun, dass wenn der Balken der SplitPane nach links gezogen wird nicht Teile der ScrollPane verschwinden (case 1). Die breite soll sich verhalten wie wenn ich case 2 verwenden würde. Da das Panel aber ziemlich lang ist, soll es vertical scrollbar sein.


```
import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.*;

import de.shadowhunt.util.gui.ComponentFactory;

public class TestGUI extends JFrame {

	public static void main(final String[] args) {
		new TestGUI();
	}

	public TestGUI() {

		JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
		split.setBorder(ComponentFactory.EMPTY_BORDER);
		split.setContinuousLayout(true);
		split.setOneTouchExpandable(true);

		// left
		DefaultListModel dlm = new DefaultListModel();
		for (int i = 0; i < 100; i++) {
			dlm.addElement("Test");
		}
		JList list = new JList(dlm);

		JScrollPane left = new JScrollPane(list);
		left.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		left.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
		split.setLeftComponent(left);

		// right
		JPanel panel = new JPanel();
		panel.setLayout(new FlowLayout());
		panel.add(new JButton("aaa"));
		panel.add(new JButton("bbb"));
		panel.add(new JButton("ccc"));
		panel.add(new JButton("ddd"));

		JScrollPane right = new JScrollPane(panel);
		right.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		right.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
		split.setRightComponent(right); // case 1
		// split.setRightComponent(panel); // case 2

		add(split, BorderLayout.CENTER);
		setSize(400, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
}
```


----------



## SlaterB (15. Mai 2008)

bei mir gibts zwischen case1 und 2 keinen Unterschied, panel liegt doch praktisch genau in right?

zum Verschwinden durch Ziehen:

ersetze
>  split.setLeftComponent(left); 
durch
       left.setMinimumSize(left.getPreferredSize());
       split.setLeftComponent(left);


----------

