2011-03-07 71 views
1

我正在研究一个包含左侧JScrollPane中项目列表的小程序。JScrollPane:如何自动调整滚动中包含的JPanel的大小

用户将能够从这个列表中添加和删除元素。因此

我需要创建一个滚动列表。

这部分很容易。

我通常很想做大部分手动调整图形用户界面的工具,但我在JScrollPane的文档中看到,最好让它能够处理它而不是手动更改尺寸。

问题是我不断添加元素,并且内部面板不会更改大小。

有什么想法?

这里是一些我使用的代码: 构造:

public SideBarView(Dimension d) { 

     super(d); 
     Dimension d2 = new Dimension(100,300); 

     this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); 
     //INSIDE VIEW (zone that is being scrolled) 
     container = new SideBarContainer(d2); 

//  container.setSize(d2); 
//  container.setPreferredSize(d2); 
//  container.setMaximumSize(d2); 
//  container.setMinimumSize(d2); 


     scrollPane = new MyJScrollPane(container); 

     new ImageLoaderWorker(this,menuButton).execute(); 

     Dimension d3 = new Dimension(d.width, d.height-d.width); 
     scrollPane.setSize(d3); 
     scrollPane.setMaximumSize(d3); 
     scrollPane.setMinimumSize(d3); 
     scrollPane.setPreferredSize(d3); 

     add(scrollPane,BorderLayout.PAGE_START); 
     setBorder(BorderFactory.createEmptyBorder()); 
} 

添加到容器:

element = new JPanel(); 
     Dimension d2 = new Dimension(100,100); 

     element.setSize(d2); 
     element.setPreferredSize(d2); 
     element.setMaximumSize(d2); 
     element.setMinimumSize(d2); 

     element.setBackground((panelcount++%2==0)?Color.BLUE:Color.RED); 
     cointainer.add(element); 

任何想法,我缺少的是什么?还是我应该随手调整容器的尺寸?

+0

为了更好地提供帮助,请发布SSCCE(http://pscode.org/sscce.html)。 – 2011-03-07 11:58:24

回答

4

你需要告诉容器布置的组件。这是通过重新验证面板完成的:

container.add(element); 
container.revalidate(); 
2
panel.setSize(d2); 
panel.setPreferredSize(d2); 
panel.setMaximumSize(d2); 
panel.setMinimumSize(d2); 

这让我们没有选择调整挥杆,因为你告诉布局管理器使用完全相同D2(100/100)的大小。

尝试不使用setMaximumSizesetPreferredSize。您也许需要在添加/删除内容后使面板或滚动条无效。

编辑:
我想我认为panel是你的遏制者。你能提供你的scrollpane和容器的设置代码吗?

你设置了容器的布局管理?

+0

实际上,您引用的代码(添加到容器)是我要滚动的元素列表,因此它们的大小是固定的,在构造函数中您会注意到所有“容器”设置都是默认值 – 2011-03-07 10:11:53

+0

是,但是什么是SideBarContainter?你自己的类从JPanel继承? – Thomas 2011-03-07 10:13:24

+0

SideBarContainter简直是一个JPanel,(我用它来帮助handleing鼠标事件,如弹出菜单) – 2011-03-07 10:16:43

0

另一种可能性,如果你不必亲自去做,可以使用一些SwingX组件(如TaskPane等)。不幸的是,它们似乎正在转换到java.net,因此许多资源目前尚未提供。但是,有一个基本的download page