将下面的flowPanel加到scrollpane中,JScrollPane   sp   =   new   JScrollPane(flowPanel); 滚动条可以出现,但是往下拖得时候滚动条就是不往下走,总会自动弹到最上面了。请问我该怎么改了? 当然去掉下面的getPreferredSize方法就可以了。但是不是我要得效果。JPanel flowPanel=new JPanel(new FlowLayout(FlowLayout.LEFT))
{   
     
  public Dimension getPreferredSize(){  
  
  JViewport viewport   =(JViewport)getParent();   
  if   (viewport!=null){   
  
  int wid=viewport.getWidth();   
  setSize(wid,100);   
  doLayout();        
  FlowLayout layout   = (FlowLayout)getLayout();   
  int   hei   =   layout.getVgap();   
  for   (int   i   =   0;   i   <   getComponentCount();   i++)   {   
  Component   c   =   getComponent(i);   
  hei   =   Math.max(hei,   c.getY()   +   c.getHeight()   +   layout.getVgap());   
  }        
  return   new   Dimension(wid,hei);  
  }
     
  return   super.getPreferredSize(); 
  }
};

解决方案 »

  1.   

    想不明白,为什么要覆盖getPreferredSize()方法啊,布局管理器会控制控件的大小。
    把覆盖的代码去掉吧。
      

  2.   

    能不能在flowPanel的ComponentCount变化的时候再设置size?
      

  3.   

    当然可以,但是不是像你这样做。你可以通过事件来做。
    例如: 具体怎么样做自己试试吧,我也没尝试过。
        flowPanel.getContentPane().addContainerListener(new ContainerListener(){
          
          @Override
          public void componentRemoved(ContainerEvent e){
             // flowPanel.setSize(); 或者flowPanel.setPreferredSize()
          }
          
          @Override
          public void componentAdded(ContainerEvent e){
             // flowPanel.setSize(); 或者flowPanel.setPreferredSize()
          }
        });
      

  4.   

    额,不要自己去控制组件的大小
    你可以用垂直的Box去当容器嘛,何必要自己去控制Flowlayout的JPanel呢?