JScrollPane
-
ich hab ein JPanel mit einem JScrollPane. der inhalt des JPanel ändert sich und wird zu groß für das fenster aber die scrollbars erscheinen nicht. sobald ich jetzt das fenster einen millimeter größer oder kleiner mache sind sie da.
welche mysteriöse funktion wird da aufgerufen wenn ich die fenstergröße verändere und kann ich die auch manuell aufrufen?
oder wie bringe ich das JScrollPane sonst dazu auf die veränderungen im JPanel zu reagieren?
-
Wie rufst du das JSccrollPane denn auf?
JScrollPane scrollPane = new JScrollPane ( new CumstomPanel ( ) )
So sollte es eigentlich klappen.
-
ich verusch mal das wichtigste rauszukopieren:
class RBDraw extends JPanel { public void paint(Graphics g) { ... } public Dimension getPreferredSize() { return new Dimension(2 * w, deep * pathLengthHight + 20); } public Dimension getMinimumSize() { return new Dimension(2 * w, deep * pathLengthHight + 20); } } class RBWindow extends JFrame { private RBDraw rbd; private JScrollPane scroll; RBWindow() { rbd = new RBDraw(tree); rbd.updateSettings(); scroll = new JScrollPane(rbd); Container c = getContentPane(); c.setLayout(new BorderLayout()); c.add(scroll,BorderLayout.CENTER); c.add(p,BorderLayout.NORTH); setSize(640, 480); setVisible(true); scroll.setPreferredSize(new Dimension(640, 480)); } }
sobald getMinimumSize von RBDraw etwas zurück gibt was größer als 640x480 ist soll der scrollbalken auftauchen. das tut er aber nicht. aber: sobald ich das fenster einen millimeter größer oder kleiner mache und er schon über 640x480 ist, taucht der scrollbalken sofort auf.
die frage ist, wieso weiß der scrollbalken das er auftauchen muss wenn ich die fenstergröße verändere und sonst nicht?
-
es geht jetzt, ein
revalidate()
am ende der paint-funktion hat wunder bewirkt