Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht

Ich möchte gerne in einer JSplitPane auf einer Seite einen Button und eine JScrollPane einfügen. Mein Ergebnis sieht zwar auf den ersten Blich gut aus, scrolled aber nicht:


frame=new JFrame();
splitPane = new JSplitPane();
pane = new JPane();
scrollPane = new JScrollPane(<JTable>);
pane.add(JButton.., BorderLayout.NORTH);
pane.add(scrollPane, , BorderLayout.CENTER);
splitPane.setLeftComponent(pane);
frame.add(splitPane);

Das gibt in etwa die Stafffelung wieder; Button und ScrollPane werden in ein JPanel gepackt; das steckt in einem JSplitPane und alles in einem JFrame.

Wenn ich das ScrollPane (ohne JPanel und damit auch ohne JButton) direkt in die JSplitPane einfüge funktioniert es wunderbar; aber den Button möchte ich aus logischen Gründen gerne dabei haben.

Was mache ich falsch?

mfg
Ulrich
 
Benutze doch bitte mal die Forensuch! Stichwort: JScrollPane
Mögliche Lösung: Scrollpane taucht nicht auf

--> Ein JScrollPane ist immer nur für eine Komponente zuständig. Diese wird ihr als ViewportView gesetzt, entweder direkt im Konstrukor oder mit der Methode
Code:
setViewportView(deineKomponente);
 
Danke für den Hinweis, aber das Besipiel passt nicht ganz. Ich denke Ursache ist der Grad des Indirekten hier. In dem genannten Beispiel wurde eine JTextArea in ein zu kleines JPanel gesteckt; dadurch erscheinen die Scrollbalken automatisch.

Ich habe eine JTable in einer JScrollPane in einem JPanel in einer JSplitPane in einem JFrame. Die JScrollPane wird beim Zusammenschieben des JFrames nur überdeckt und nicht komprimiert. Vermutlich muss ich einen PropertyChangeListener auf die JSplitPane legen und die Größe der JScrollPane immer mit anpassen. Ich kann nicht sagen, dass mir das gefällt - und es funktioniert auch nicht wie ich denke dass es funktionieren sollte.

[Java]
GivenFieldnamesTable gft;
SelectedFieldnamesTable sft ;
Vector<String[]> sfields = new Vector<String[]>(20, 10);
Border redline, greenline;
public UIselectFields(String[] fields, String[] titles, Dimension dimension) {
this.setOrientation(HORIZONTAL_SPLIT);
this.fields=fields;
this.titles=titles;
this.addPropertyChangeListener(this);

redline = BorderFactory.createLineBorder(Color.red);
greenline = BorderFactory.createLineBorder(Color.green);

gft = new GivenFieldnamesTable(fields, titles);
sft = new SelectedFieldnamesTable(sfields, remove, up, down);

JPanel leftPane = new JPanel();
leftPane.setBorder(redline);

JScrollPane newPane=new JScrollPane();
newPane.setBorder(greenline);

newPane.setSize(50, 50);
gft.setTableSize(100, 100);
newPane.setViewportView(gft.getJTable);

leftPane.add(newPane, null);
leftPane.setSize(140, 150);

this.setLeftComponent(leftPane);
this.setRightComponent(sft.getJTable);
}

public void propertyChange(PropertyChangeEvent pce) {
System.out.println(pce.getPropertyName() + " " + this.getDividerLocation() + " " + this.getHeight());
}

[/Java]

Ich denke in beiliegender Source kann man erkennen was hier passiert. Die setSize()-Methoden wirken sich gar nicht aus. Die Borders habe ich eingefärbt um zu sehen was beim komprimieren passiert; die JPanel verkleinert sich analog zur JSplitPane während die JScrollPane mit dem grünen Rand völlig unbeeindruckt bleibt. Und wie gesagt, da sie setSize()-Methode nichts verändert egal welche Werte ich wähle stehe ich im Augenblick etwas auf dem Schlauch.

mfg
Ulrich
 
Im Code war nicht explizit
Java:
setLayout(new BorderLayout())
gesezt. Dadurch arbeitete das JPanel mit FlowLayout. Und damit scheint es nicht zu funktionieren - warum auch immer.
 

Zurück
Oben