Swing JScrollPane scrollt nicht

blxydr

Mitglied
Hallo zusammen,

ich weiß, dass es einige ähnliche Beiträge gibt, aber die dortigen Tips haben mir leider trotz mehrstündiger Versuche in den letzten Tagen nicht weitergeholfen. Deshalb poste ich nun hier mein eigenes Problem.

In einem JFrame wird ein JPanel mit diversen Elementen (Buttons, Labels usw.) erzeugt, das scrollbar sein soll. Deshalb weise ich es einem JScrollPane zu (per setViewportView, s. Code-Beispiel). Die Elemente des JPanels (Bezeichnung m_Panel) werden dann auch korrekt angezeigt, und zwar in der von mir für den Viewport definierten Größe. Allerdings lässt sich die Scrollbar nicht bedienen.
Seltsamerweise bleibt auch getMaximum() der veritcalScrollbar auf 0, was sich auch durch Aufruf von setMaximum() nicht verändern lässt.

Ich habe auch einige Debug-Ausgaben eingefügt, deren Ausgabe ich unterhalb des Codes hinzufüge. Es wäre wirklich klasse, wenn mir jemand helfen könnte!


Java:
public class EigeneKlasse extends JFrame {
    private JPanel m_Panel = new JPanel();
    

    public EigeneKlasse() {
        [...]
        m_Panel.setLayout(new BorderLayout());
        [...]
        m_Panel.setBounds(xPanel, yPanel, breitePanel, heightPanel);
        System.out.println("m_Panel.setBounds("+xPanel+"; "+yPanel+"; "+breitePanel+"; "+heightPanel);
        
        [...] // m_Panel werden dann noch diverse Labels, Buttons usw. hinzugefügt
        
        m_Panel.setVisible(true);
        m_Panel.setOpaque(true);
        
        m_ScrollPane = new JScrollPane();
        m_ScrollPane.setBounds(xPanel, yPanel, breitePanel, 200);
        Rectangle rect = m_ScrollPane.getBounds();
        System.out.println("m_ScrollPane (t0): x="+rect.getX()+"; y="+rect.getY()+"; höhe="+rect.getHeight()+"; breite="+rect.getWidth());
        
        m_ScrollPane.setViewportView(m_Panel);
        m_ScrollPane.getViewport().setBounds(rect);
        System.out.println("m_ScrollPane (t1): x="+rect.getX()+"; y="+rect.getY()+"; höhe="+rect.getHeight()+"; breite="+rect.getWidth());
        System.out.println("m_ScrollPane (t1): preferredSize - breite="+m_ScrollPane.getPreferredSize().getWidth()+"; höhe="+m_ScrollPane.getPreferredSize().getHeight());

        Dimension dimension = new Dimension();
        dimension.setSize(rect.getWidth(), rect.getHeight());
        m_ScrollPane.setPreferredSize(dimension);

        Rectangle rectPanel = m_ScrollPane.getViewport().getBounds();
        System.out.println("m_ScrollPane->Viewport-Panel (t2): x="+rectPanel.getX()+"; y="+rectPanel.getY()+"; höhe="+rectPanel.getHeight()+"; breite="+rectPanel.getWidth());
        System.out.println("m_ScrollPane (t2): preferredSize - breite="+m_ScrollPane.getPreferredSize().getWidth()+"; höhe="+m_ScrollPane.getPreferredSize().getHeight());

        m_ScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);//.VERTICAL_SCROLLBAR_AS_NEEDED);
        System.out.println("Anzahl der Komponenten in m_ScrollPane = "+m_ScrollPane.getComponentCount());
//        m_ScrollPane.getVerticalScrollBar().setBlockIncrement(height+5);
//        m_ScrollPane.getVerticalScrollBar().setUnitIncrement(1);
//        m_ScrollPane.getVerticalScrollBar().enableInputMethods(true);
        m_ScrollPane.getVerticalScrollBar().setEnabled(true);
        m_ScrollPane.getVerticalScrollBar().setMinimum(0);
        m_ScrollPane.getVerticalScrollBar().setMaximum(100);
        m_ScrollPane.getVerticalScrollBar().setValue(50);
        System.out.println("vertikales Min="+m_ScrollPane.getVerticalScrollBar().getMinimum()+"; vertikales Max="+m_ScrollPane.getVerticalScrollBar().getMaximum());
        m_ScrollPane.setWheelScrollingEnabled(true);
        //TODO: der Scrollbalken lässt sich noch nicht bedienen!!!!!
        
        m_ScrollPane.getViewport().setVisible(true);
        m_ScrollPane.getViewport().setOpaque(true);
        m_ScrollPane.setVisible(true);
        m_ScrollPane.setOpaque(true);
        
        System.out.println("Layout="+m_ScrollPane.getLayout().toString());

        System.out.println("isShowing() - m_Panel="+m_Panel.isShowing()+"; m_ScrollPane="+m_ScrollPane.isShowing()+"; m_ScrollPane.getViewPort()="+m_ScrollPane.getViewport().isShowing());
        System.out.println("m_ScrollPane.getViewport().isShowing()="+m_ScrollPane.getViewport().isShowing()+"; breite="+m_ScrollPane.getViewport().getWidth()+"; höhe="+m_ScrollPane.getViewport().getHeight());
        cp.add(m_ScrollPane, BorderLayout.CENTER);
        
        setVisible(true);
        }
}

Das liefert folgende Debug-Ausgaben:
[CODE title="Debug-Ausgaben"]m_Panel.setBounds(32; 98; 960; 660
m_ScrollPane (t0): x=32.0; y=98.0; höhe=200.0; breite=960.0
m_ScrollPane (t1): x=32.0; y=98.0; höhe=200.0; breite=960.0
m_ScrollPane (t1): preferredSize - breite=3.0; höhe=3.0
m_ScrollPane->Viewport-Panel (t2): x=32.0; y=98.0; höhe=200.0; breite=960.0
m_ScrollPane (t2): preferredSize - breite=960.0; höhe=200.0
Anzahl der Komponenten in m_ScrollPane = 3
vertikales Min=0; vertikales Max=0
Layout=javax.swing.ScrollPaneLayout$UIResource@5e129249
isShowing() - m_Panel=false; m_ScrollPane=false; m_ScrollPane.getViewPort()=false
m_ScrollPane.getViewport().isShowing()=false; breite=960; höhe=200[/CODE]
 
Beste Antwort
Danke für die Rückmeldung!
Leider habe ich dann nur ein leeres Fenster, da wo die ScrollPane sein sollte, sprich: keine der Komponenten wird angezeigt. Wenn ich m_ScrollPane.setBounds aufrufe, dann sehe ich die scrollPane wieder. Ergo: der Aufruf von setBounds ist wichtig.
Nein. Das ist die falsche Lösung. Die Lösung, die Komponenten richtig anzuordnen. Das heißt, das erste sollte sein, dafür zu sorgen, dass das Layout des anzuzeigenden Panels richtig ist. Beim Panel gehört auch kein setBounds hin. Du hast ein BorderLayout, also sollte das automatisch gemäß dem BorderLayout layouten, wenn du es richtig zusammenbaust.

blxydr

Mitglied
Mittlerweile habe ich das ganze auch mal nicht nur in Eclipse programmiert, sondern auch im Java-Editor grafisch zusammengebaut. Dort lässt es sich ebenfalls nicht scrollen. Es scheint sich also nicht um einen Programmierfehler, sondern um ein grundsätzliches Problem zu handeln.

Ich wäre wirklich dankbar um Hilfe bei diesem Thema!
 

LimDul

Top Contributor
Die ganzen Aufrufe von setbounds & Co sehen falsch aus.

Eigentlich braucht man nur einen LayoutManager und fertig. Auch muss man Components nicht visible oder opaque setzen.

Du greifst da gerade derartig extrem in die interna der Scrollpane ein, dsas da fast klar ist, dass es nicht richtig funktioniert.

Code:
Jpanel panel = new JPanel();
// Füge DInge hinzu, dass das Panel größer als der Frame ist 
JScrollPane scrollPane = new JScrollPane(panel);
frame.add(scrollPane)
Fertig - das ganze was du drumherum tust, macht mehr kaputt als das es was sinnvolles tust, weil du damit in interna, wie Swing die Componenten Layoutet eingreifst.
 

blxydr

Mitglied
Danke für die Rückmeldung!
Leider habe ich dann nur ein leeres Fenster, da wo die ScrollPane sein sollte, sprich: keine der Komponenten wird angezeigt. Wenn ich m_ScrollPane.setBounds aufrufe, dann sehe ich die scrollPane wieder. Ergo: der Aufruf von setBounds ist wichtig.

Scrollen kann ich aber immer noch nicht, ja nicht einmal die ScrollBar wird angezeigt... Irgendwie scheint JScrollPane nicht zu erkennen, dass hier gescrollt werden muss bzw. dass m_Panel größer ist als der ViewPort von JScrollPane

Hier nun der aktuelle Code:
[CODE lang="java" title="Aktueller Code"]public class EigeneKlasse extends JFrame {
private JPanel m_Panel = new JPanel();


public EigeneKlasse() {
[...]
m_Panel.setLayout(new BorderLayout());
[...]
m_Panel.setBounds(xPanel, yPanel, breitePanel, heightPanel);

[...] // m_Panel werden dann noch diverse Labels, Buttons usw. hinzugefügt

m_ScrollPane = new JScrollPane(m_Panel);
m_ScrollPane.setBounds(xPanel, yPanel, breitePanel, 200);

add(m_ScrollPane);

setVisible(true);
}
}[/CODE]
 

LimDul

Top Contributor
Danke für die Rückmeldung!
Leider habe ich dann nur ein leeres Fenster, da wo die ScrollPane sein sollte, sprich: keine der Komponenten wird angezeigt. Wenn ich m_ScrollPane.setBounds aufrufe, dann sehe ich die scrollPane wieder. Ergo: der Aufruf von setBounds ist wichtig.
Nein. Das ist die falsche Lösung. Die Lösung, die Komponenten richtig anzuordnen. Das heißt, das erste sollte sein, dafür zu sorgen, dass das Layout des anzuzeigenden Panels richtig ist. Beim Panel gehört auch kein setBounds hin. Du hast ein BorderLayout, also sollte das automatisch gemäß dem BorderLayout layouten, wenn du es richtig zusammenbaust.
 
Beste Antwort

blxydr

Mitglied

blxydr

Mitglied
So, ich habe es jetzt hingekriegt. Es lag tatsächlich am Layout des JPanels!
Wenn ich das richtig interpretiere, dann war die Ursache, dass JScrollPane die Höhe des JPanels nicht richtig ermitteln konnte (auch wenn mir nicht klar ist, wieso das per JPanel.setBounds() nicht gehen sollte). Ich hatte anscheinend wirklich einfach zu viel in Swing eingegriffen - ganz so, wie LimDul das schrieb.

Nochmals herzlichen Dank für die Hilfe, LimDul und Blender3D!!
 

LimDul

Top Contributor
Ich kenne die Details in Swing auch nicht. Aber es gibt nicht nur Bounds, sondern auch die PreferredSize, minumum und maximum Size. Und diese nutzen LayoutManager um daraus die korrekte Größe zu ermitteln. Du greifst mit setBounds in einen Teil des gesamten Prozesses ein, aber eben nur einen Teil - und dann passieren merkwürdige Dinge :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JScrollPane scrollt nicht !! AWT, Swing, JavaFX & SWT 3
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
R JScrollPane scrollt nicht AWT, Swing, JavaFX & SWT 5
D JScrollPane scrollt nicht AWT, Swing, JavaFX & SWT 2
0 JScrollPane scrollt nicht nach unten AWT, Swing, JavaFX & SWT 5
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
H JTable in JScrollPane scrollt vertikal, nicht horizontal AWT, Swing, JavaFX & SWT 5
B JscrollPane scrollt nicht nach links oder oben AWT, Swing, JavaFX & SWT 3
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
P Swing JScrollPane scrollt nur horizontal AWT, Swing, JavaFX & SWT 2
G JScrollPane scrollt zu langsam AWT, Swing, JavaFX & SWT 6
G JScrollPane scrollt nach Neuzeichnen von selber AWT, Swing, JavaFX & SWT 2
S Wie scrollt JScrollPane zu dem makierten Eintrag der JList? AWT, Swing, JavaFX & SWT 3
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
N Swing JScrollPane mit Tastatur bedienen? AWT, Swing, JavaFX & SWT 0
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
P Swing JEditorPane in Kombination mit JScrollPane AWT, Swing, JavaFX & SWT 29
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
D JScrollPane in JTabbedPane AWT, Swing, JavaFX & SWT 3
MaxG. Swing JScrollPane AWT, Swing, JavaFX & SWT 10
Soloeco Swing JScrollPane AWT, Swing, JavaFX & SWT 6
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
U JScrollPane -> JTabbedPane u.A. AWT, Swing, JavaFX & SWT 3
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
Bluedaishi JScrollpane AWT, Swing, JavaFX & SWT 0
F JScrollPane Position setzen (x=0, y=0) AWT, Swing, JavaFX & SWT 2
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
S JScrollPane und BorderLayout AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
F JTable mit JScrollPane AWT, Swing, JavaFX & SWT 4
I JPanel in JScrollPane verkleinert sich leider nicht .... AWT, Swing, JavaFX & SWT 2
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
B Swing JPanel in JScrollPane einfügen AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Transparentes JScrollPane AWT, Swing, JavaFX & SWT 0
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
R Ändern Default-Verhalten von JScrollpane in einer JScrollpane AWT, Swing, JavaFX & SWT 1
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
A JScrollPane - ScrollBar Buttongröße verändern AWT, Swing, JavaFX & SWT 1
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
A Swing JScrollPane Problem AWT, Swing, JavaFX & SWT 6
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane in JScrollPane - Problem AWT, Swing, JavaFX & SWT 3
K Bug in JScrollPane? AWT, Swing, JavaFX & SWT 4
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
M JScrollPane Header AWT, Swing, JavaFX & SWT 3
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
V LayoutManager JScrollPane verwirft Elementanordnung AWT, Swing, JavaFX & SWT 3
B JScrollPane Problem AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane AWT, Swing, JavaFX & SWT 7
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
F 2D-Grafik Skalieren der Scrollbars beim Zoomen einer JScrollPane AWT, Swing, JavaFX & SWT 4
B JScrollPane Horizontal klappt nicht. AWT, Swing, JavaFX & SWT 4
G JScrollPane reagiert nicht auf Änderung der JPanel-Größe AWT, Swing, JavaFX & SWT 4
C jPanel auf jScrollPane zentrieren AWT, Swing, JavaFX & SWT 3
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A Swing Korrekte JTable.rowAt(point) für JTable in JScrollPane AWT, Swing, JavaFX & SWT 5
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
S JScrollPane reagiert nicht AWT, Swing, JavaFX & SWT 3
X JScrollPane zu JTable hinzufügen AWT, Swing, JavaFX & SWT 16
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
D LayoutManager JScrollPane mit dynamischem Inhalt AWT, Swing, JavaFX & SWT 8
P Swing JScrollpane AWT, Swing, JavaFX & SWT 2
V Swing JScrollPane Viewport verschieben AWT, Swing, JavaFX & SWT 2
J JScrollPane Probleme AWT, Swing, JavaFX & SWT 3
S Swing JScrollPane verliert Scrollbars AWT, Swing, JavaFX & SWT 5
D Swing JTable in JScrollpane beliebig verbreitern AWT, Swing, JavaFX & SWT 5
A Swing Anzeige Text in JScrollpane AWT, Swing, JavaFX & SWT 8
J Swing Unteren Abstand für JTable in JScrollPane festlegen AWT, Swing, JavaFX & SWT 10
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
M JScrollPane Problem AWT, Swing, JavaFX & SWT 6
S Swing JScrollpane und ViewPort AWT, Swing, JavaFX & SWT 4
D JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 12
X JScrollPane funzt net... AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben