Hallo ihr Lieben,
ich habe das Problem, dass ich außen eine JScrollPane habe, die in sich mehrere JScrollPanes hat.
Bei der Äußersten soll nur Vertikal gescrollt werden. Bei den Inneren darf beides.
Daher hab ich
benutzt. jetzt kann ich zwar nicht horizontal Scrollern. Aber dafür wird mir auch nicht alles angezeigt, wenn die JPanels in den inneren JScrollPanes größer werden.
Hier ein Beispiel:
Das ist natürlich nicht meine eigentliche Klasse
Aber sie spiegelt von den JScrollPanes, Boxen und Panels ca das wieder, was ich habe!
Und ehrlich gesagt trifft hier das Problem auch nur "verzögert" auf. Wenn man hier auf den "Resize-Button" klickt passiert alles so, wie es soll. Wenn man jetzt aber die Größe des JFrame's leicht verändert oder runter scrollt, dann bekommt man auch hier beim Beispiel das Problem.
Wie schaffe ich es also, dass die äußere JScrollPane nicht nur den horizontalen Scroller ausblendet, sondern auch das ganze was gescrollt werden soll an die innere weitergibt?
Schonmal Danke für eure Mühe =)
ich habe das Problem, dass ich außen eine JScrollPane habe, die in sich mehrere JScrollPanes hat.
Bei der Äußersten soll nur Vertikal gescrollt werden. Bei den Inneren darf beides.
Daher hab ich
Java:
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
Hier ein Beispiel:
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class JScrollPaneTest extends JPanel {
private static final long serialVersionUID = 1L;
public JScrollPaneTest() {
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
Box scrollyBoxes = Box.createVerticalBox();
final JPanel testPanel1 = new JPanel();
testPanel1.setBackground(Color.RED);
testPanel1.setPreferredSize(new Dimension(100,100));
final JScrollPane testScrolly1 = new JScrollPane(testPanel1);
testScrolly1
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
testScrolly1
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollyBoxes.add(testScrolly1);
JPanel testPanel2 = new JPanel();
testPanel2.setPreferredSize(new Dimension(100,100));
testPanel2.setBackground(Color.GREEN);
JScrollPane testScrolly2 = new JScrollPane(testPanel2);
testScrolly2
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
testScrolly2
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollyBoxes.add(testScrolly2);
JScrollPane lastJScrollPane = new JScrollPane(scrollyBoxes);
lastJScrollPane
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
lastJScrollPane
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
JButton resizeButton = new JButton("RESIZE");
resizeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Dimension d = new Dimension(250,250);
testPanel1.setPreferredSize(d);
testPanel1.revalidate();
}
});
Box buttonBox = Box.createHorizontalBox();
buttonBox.add(resizeButton);
this.add(lastJScrollPane);
this.add(buttonBox);
}
public static void main(String[] args) {
JFrame testFrame = new JFrame();
testFrame.add(new JScrollPaneTest());
testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
testFrame.setSize(200, 200);
testFrame.setVisible(true);
}
}
Das ist natürlich nicht meine eigentliche Klasse
Und ehrlich gesagt trifft hier das Problem auch nur "verzögert" auf. Wenn man hier auf den "Resize-Button" klickt passiert alles so, wie es soll. Wenn man jetzt aber die Größe des JFrame's leicht verändert oder runter scrollt, dann bekommt man auch hier beim Beispiel das Problem.
Wie schaffe ich es also, dass die äußere JScrollPane nicht nur den horizontalen Scroller ausblendet, sondern auch das ganze was gescrollt werden soll an die innere weitergibt?
Schonmal Danke für eure Mühe =)