2012-04-04 13 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を意味し、それに子を追加するときに拡大しないことを意味し、それに関連付けられたレイアウトマネージャを、持っていませんスクロールする場所がありません。 DetailPanelでsetLayout()を呼び出すか、getPreferredSize()をオーバーライドして、子の高さを合計して意味のある値を返します。

+0

私はこのことを正しく取ることができなかったので、設定者、すなわち 'setPreferredSize()'を使用しようとすると、間違っていますorzechowskidはgetterを上書きする必要があると言うので、 'getPreferredSize()'、thisはとても重要です。 – mastazi

3

私は間違っている可能性がありますが、DetailPanelのレイアウトがnullなのでこれが起こっている可能性があります。 BoxLayoutを垂直方向に使用し、detail.setPreferredSize(new Dimension(140,400));を呼び出すとどうなりますか?

+0

+1はsetPrefSizeのために犯人-1を見つけます(それはno-no-neverです、http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in- java-swi/7229519#7229519) – kleopatra