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 Wochen nicht weitergeholfen. Deshalb poste ich nun hier mein eigenes Problem.
In meinem Programm wird in einem JFrame ein JPanel mit diversen Elementen (Buttons, Labels usw.) erzeugt, das scrollbar sein soll. Damit es gescrollt werden kann, weise ich es einem JScrollPane zu (per setViewportView, s. Code). 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 (scrollen).
Seltsamerweise bleibt auch getMaximum() der verticalScrollbar auf 0, was sich auch durch Aufruf von setMaximum() nicht verändern lässt.
Das Ganze habe ich mittlerweile auch grafisch im Java-Editor nachgebaut, aber auch dort lässt sich das Panel nicht scrollen.
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!
[CODE lang="java" title="Programm-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);
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);
}
}
[/CODE]
Das liefert folgende Debug-Ausgaben:
[CODE lang="java" 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]
Dieses Thema hatte ich schon unter https://www.java-forum.org/thema/jscrollpane-scrollt-nicht.194528/ gepostet, aber da dort nicht darauf geantwortet wurde, gehe ich davon aus, dass es evtl. in der falschen Kategorie war und poste es hier noch einmal..
ich weiß, dass es einige ähnliche Beiträge gibt, aber die dortigen Tips haben mir leider trotz mehrstündiger Versuche in den letzten Wochen nicht weitergeholfen. Deshalb poste ich nun hier mein eigenes Problem.
In meinem Programm wird in einem JFrame ein JPanel mit diversen Elementen (Buttons, Labels usw.) erzeugt, das scrollbar sein soll. Damit es gescrollt werden kann, weise ich es einem JScrollPane zu (per setViewportView, s. Code). 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 (scrollen).
Seltsamerweise bleibt auch getMaximum() der verticalScrollbar auf 0, was sich auch durch Aufruf von setMaximum() nicht verändern lässt.
Das Ganze habe ich mittlerweile auch grafisch im Java-Editor nachgebaut, aber auch dort lässt sich das Panel nicht scrollen.
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!
[CODE lang="java" title="Programm-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);
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);
}
}
[/CODE]
Das liefert folgende Debug-Ausgaben:
[CODE lang="java" 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]
Dieses Thema hatte ich schon unter https://www.java-forum.org/thema/jscrollpane-scrollt-nicht.194528/ gepostet, aber da dort nicht darauf geantwortet wurde, gehe ich davon aus, dass es evtl. in der falschen Kategorie war und poste es hier noch einmal..