2012-04-04 4 views
4

У меня есть JPanel, который содержит некоторые поля. Высота JPanel ограничена, поэтому я должен разместить вокруг нее JScrollPane, чтобы люди могли прокручивать вниз.Java Swing: JScrollPane не работает

Как вы можете видеть ниже, оно отображается отлично. Но вы не можете прокручивать вниз (или вверх).

DetailPanel detail = new DetailPanel(); 
JScrollPane jsp = new JScrollPane(detail); 
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
jsp.setBounds(745, 10, 235, 225); 
add(jsp); 

Детали панель:

private void init(){ 
      setLayout(null); 
      setSize(140, 400); 
      int x = 5, y = 0; 
      for(int i = 0; i < lbls.length; i++) { 
       JLabel lbl = new JLabel(lbls[i]); 
       lbl.setBounds(x, y, 200, 25); 
       add(lbl); 
       fields[i] = new JTextField(); 
       fields[i].setBounds(x, y+26, 200, 25); 
       add(fields[i]); 
       y+=50; 
      } 
     } 

enter image description here

ответ

5

Ваш DetailPanel не имеет менеджера компоновки, связанный с ним, а значит, не расширяется при добавлении детей к нему, что означает JScrollPane не имеет возможности прокручивать. Либо вызовите setLayout() на свой DetailPanel, либо переопределите getPreferredSize(), чтобы добавить высоты своих детей и вернуть значимое значение.

+0

Будущее, поскольку я не мог правильно это понять: попытка использовать setter, то есть 'setPreferredSize()', является WRONG, поскольку orzechowskid говорит, что вам нужно переопределить getter, то есть 'getPreferredSize()', это очень важно. – mastazi

3

Я мог ошибаться, но я думаю, что это может произойти, поскольку макет DetailPanel имеет значение null. Что произойдет, если вы используете BoxLayout в вертикальной ориентации и звоните detail.setPreferredSize(new Dimension(140,400));?

+0

+1 для определения виновника -1 для setPrefSize (это нет-нет-никогда, http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in- Java-SWI/7229519 # 7229519) – kleopatra

Смежные вопросы