# JScrollPane & Null-Layout



## Jens81 (13. Jul 2009)

Hallo zusammen,

ich möchte / muss eine scrollbare JEditorPane erstellen ohne einen LayoutManager zu verwenden.

Grundlage ist ein JPanel dessen Größe und Position mit setBounds() festgelegt ist. Darauf liegt das JScrollPane. Als Parameter wird ihm JEditorPane übergeben. Die Größen und Positionen vom JScrollPane und JEditorPane sind ebenfalls über setBounds festgelegt.

Das JPanel verwendet keinen Layoutmanager (null).

Wie schaffe ich es, trotzdem Scrollbalken am EditorPane zu bekommen?

Danke und Gruß,
Jens

Ausschnitt aus dem Konstruktor:

```
JEditorPane ausgabe = new JEditorPane();
JPanel ausgabeArea = new JPanel();
JScrollPane f3 = new JScrollPane(ausgabe);
		
ausgabeArea.setLayout(null);
f3.setLayout(null);
		
f3.setBounds(10,190,550,285);
f3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		
ausgabe.setBounds(10, 10, 520, 265);
f3.add(ausgabe);
ausgabe.setText("...");
		
ausgabeArea.add(f3);
```


----------



## Verjigorm (13. Jul 2009)

Sobald die inhaltende JEditorpane größer wird als der Viewport der JScrollpane tauchen die Scrollbalken automatisch auf (ausser du hast sie deaktiviert)


edit zum Quellcode:
Wieso setzt du das Layout der JScrollpane auf null???


----------



## Jens81 (13. Jul 2009)

Das Problem ist, dass der vertikale Scrollbalken nicht auftaucht, auch wenn mehr Zeilen in die Ausgabe geschrieben werden als angezeigt werden können.

Zu deinem Edit: Das Layout setze ich auf null, da sonst die ausgabe erst angezeigt wird, wenn der Inhalt geändert wird (und nicht von Beginn an). Hat aber auf die Scroll-Problematik keine Auswirkung (zumindest löst ein Auskommentieren das Problem nicht).


----------



## max40 (13. Jul 2009)

```
final JEditorPane ausgabe = new JEditorPane();
final JPanel ausgabeArea = new JPanel(null);
final JScrollPane f3 = new JScrollPane(ausgabe);
        
f3.setBounds(10,190,550,285);
f3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

ausgabe.setText("...");
        
ausgabeArea.add(f3);
```

so sollte es gehen!


----------



## Jens81 (13. Jul 2009)

Ohne Angabe von Layoutmanager wird gar nichts angezeigt.

Wie "verknüpfst" du JEditorPane (ausgabe) und JScrollPane (f3)?


----------



## max40 (13. Jul 2009)

dann fügst du das Panel falsch hinzu!



> Wie "verknüpfst" du JEditorPane (ausgabe) und JScrollPane (f3)?


final JScrollPane f3 = new JScrollPane(ausgabe);


----------



## L-ectron-X (13. Jul 2009)

```
import javax.swing.*;

public class TextEditor extends JFrame {
   private JEditorPane ep;
   
   public TextEditor() {
      super("TextEditor");
      setSize(800, 600);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      ep = new JEditorPane();
      add(new JScrollPane(ep));
      
      setVisible(true);
   }
   
   public static void main(String[] args) {
      new TextEditor();
   }
}
```


----------



## Jens81 (13. Jul 2009)

Solange ich einen Layout-Manager verwende, funktioniert alles. Die Frage ist, wie man es ohne löst...

Sobald ich das JEditorPane nicht zusätzlich mit add() auf das JScrollPanel setze, wird es nicht mehr angezeigt.

Der komplette Konstruktor falls es helfen sollte....:

```
public ModelManager() {
        DefaultMutableTreeNode top = new DefaultMutableTreeNode("Data Mining");
        createNodes(top);
        tree = new JTree(top);
        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        tree.addTreeSelectionListener(this);
		
		JSplitPane hTrennung = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
		JSplitPane vTrennung = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
		
		ausgabe = new JEditorPane();
	
		JPanel kopfPanel = new JPanel();
		JScrollPane f1 = new JScrollPane(tree);
		JScrollPane f2 = new JScrollPane(kopfPanel);
		JPanel ausgabeArea = new JPanel();
		JPanel buttonArea = new JPanel();
		JScrollPane f3 = new JScrollPane(ausgabe);
		
		vTrennung.setLeftComponent(f1);
		vTrennung.setRightComponent(hTrennung);
		vTrennung.setDividerLocation(200);
		vTrennung.setPreferredSize(new Dimension(780, 565));
		
		hTrennung.setTopComponent(f2);
		hTrennung.setBottomComponent(ausgabeArea);
		hTrennung.setDividerLocation(80);
		hTrennung.setDividerSize(5);
		hTrennung.setEnabled(false);
		
		JLabel head = new JLabel("", JLabel.CENTER);
		head.setText("DM Model Manager");
		head.setFont(new Font("Arial", 0, 24));
		kopfPanel.add(head);
		
		ausgabeArea.setLayout(null);
		buttonArea.setLayout(null);
		//f3.setLayout(null);
		
		buttonArea.setBounds(10,10,550,170);
		f3.setBounds(10,190,550,285);
		f3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		
		ausgabe.setBounds(10, 10, 520, 265);
		f3.add(ausgabe);
		ausgabe.setText("Log Fenster\r\n-------------------");
		
		JButton button1 = new JButton("Connect");
		JButton button2 = new JButton("Disconnect");
		JButton button3 = new JButton("Laden");
		JButton button4 = new JButton("Beenden");
		
		button1.setBounds(10,  10, 140, 30);
		button2.setBounds(10,  50, 140, 30);
		button3.setBounds(10,  90, 140, 30);
		button4.setBounds(10, 130, 140, 30);
		
		button1.addActionListener(this);
		button2.addActionListener(this);
		button3.addActionListener(this);
		button4.addActionListener(this);
		
		buttonArea.add(button1);
		buttonArea.add(button2);
		buttonArea.add(button3);
		buttonArea.add(button4);
		buttonArea.setBorder(BorderFactory.createEtchedBorder());
		
		f3.setPreferredSize(new Dimension(520,265));
		System.out.println(f3.getPreferredSize());
		ausgabeArea.add(buttonArea);
		ausgabeArea.add(f3);
		
		this.add(vTrennung);
	}
```


----------



## max40 (13. Jul 2009)

ich versteh nicht wirklich warum du dem ScrollPane den LayoutManager entziehen willst!?


----------



## Jens81 (13. Jul 2009)

Dem ScrollPane nicht unbedingt, aber dem JPanel, auf dem alles "angebracht" wird.


----------



## max40 (13. Jul 2009)

lösche folgende Zeile!

```
f3.add(ausgabe);
```


----------



## L-ectron-X (13. Jul 2009)

Es gibt fast nie einen Grund für die Verwendung von NullLayout. Es schafft mehr Probleme als es lösen kann.


----------



## Jens81 (13. Jul 2009)

In Kombi mit dem Tipp von Max und dem Layoutmanager geht's.. danke


----------

