[java] JPanel in JScrollPane scrollt niet

Pagina: 1
Acties:

  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 17:25
Ik wil een scherm bouwen waarin ik een panel plaats waarin door de gebruiker wordt bepaald hoeveel JTextFields onder elkaar moeten worden weergegeven. Deze tekstvelden wil ik in een JScrollPane plaatsen, zodat ik voorkom dat velden niet toegankelijk zijn wanneer ze buiten de panel vallen.
Het volgende stuk code heb ik tot nu toe gebouwd:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
this.setLayout(new BorderLayout());
        JPanel testPane = new JPanel();
        testPane.setLayout(null);

        JScrollPane scrollPane = new JScrollPane(testPane);
        for (int i=0; i<40; i++) {
            JTextField field = new JTextField(Integer.toString(i));
            field.setBounds(10,
                            10+(40*i),
                            100,25);
            testPane.add(field);
        }
        testPane.setSize(800,2000);
        testPane.revalidate();
        scrollPane.revalidate();       
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        this.add(scrollPane, BorderLayout.CENTER);


Waarbij this een instantie is van JPanel. Let niet op de harde waarden, het gaat om de werking van het scrollen.

Wat ik nu op mijn scherm krijg te zien is een scrollpane waarbij wel een scrollbar te zien is, en waarbij de panel gevuld is met tekstvelden. Het probleem is dat de tekstvelden die onderin de scrollpane wegvallen niet te benaderen zijn, omdat de vertikale scrollbar niet scrollt. De scrollbar is dus wel zichtbaar, maar is niet te gebruiken.

Is er iemand die dit probleem vaker heeft gezien? Ik zou graag willen weten wat de oplossing hiervan is.

[ Voor 6% gewijzigd door JeroenTheStig op 17-02-2006 21:51 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:02

Robtimus

me Robtimus no like you

Vervang
Java:
1
testPane.setSize(800,2000);
eens door
Java:
1
testPane.setPreferredSize(new Dimension(800, 2000));

Scrollpanes gebruiken de preferred size van het component.

Wat misschien een nog betere optie is dan hard je size op te geven: bereken deze aan de hand van je text fields:
Java:
1
2
setPreferredSize(new Dimension(100, 1595));
// width van je text fields, de bottom van je onderste tet field; deze bereken je natuurlijk

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 17:25
IceManX schreef op vrijdag 17 februari 2006 @ 22:01:
Vervang
Java:
1
testPane.setSize(800,2000);
eens door
Java:
1
testPane.setPreferredSize(new Dimension(800, 2000));

Scrollpanes gebruiken de preferred size van het component.

Wat misschien een nog betere optie is dan hard je size op te geven: bereken deze aan de hand van je text fields:
Java:
1
2
setPreferredSize(new Dimension(100, 1595));
// width van je text fields, de bottom van je onderste tet field; deze bereken je natuurlijk
Inderdaad, preferredSize werkt! Dat van de grootte berekenen aan de hand van het aantal velden had ik inderdaad al in gedachten :)

Bedankt voor je hulp!

[ Voor 5% gewijzigd door JeroenTheStig op 17-02-2006 23:33 ]