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!
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]
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]