将下面的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();
}
};
{
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();
}
};
把覆盖的代码去掉吧。
例如: 具体怎么样做自己试试吧,我也没尝试过。
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()
}
});
你可以用垂直的Box去当容器嘛,何必要自己去控制Flowlayout的JPanel呢?