我正在开发一个小applet,它在左边的JScrollPane中有一个项目列表。
用户可以在此列表中添加和删除元素。
因此我需要创建一个可滚动的列表。
这部分很容易。
我经常试图手动调整大部分GUI,但我在JScrollPane的文档中读到,最好让swing处理它而不是手动更改维度。
问题是我一直在添加元素,而内部面板不会改变大小。
任何想法?
这里是我正在使用的一些代码: 构造:
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 :(得分:4)
您需要告诉容器布置组件。这是通过重新验证面板来完成的:
container.add(element);
container.revalidate();
答案 1 :(得分:2)
panel.setSize(d2);
panel.setPreferredSize(d2);
panel.setMaximumSize(d2);
panel.setMinimumSize(d2);
这个让我们没有选择调整swing的大小,因为你告诉布局管理器使用d2(100/100)的大小。
在没有setMaximumSize
和setPreferredSize
的情况下尝试。添加/删除内容后,您可能还需要使面板或滚动窗格无效。
编辑:
我想我认为panel
是你的包容。你能提供滚动窗格和容器的设置代码吗?
您是否为容器设置了布局管理器?
答案 2 :(得分:0)
另一种可能性,如果你不必自己做,可能是使用一些SwingX组件(如TaskPane等)。不幸的是,它们似乎正在向java.net过渡,因此截至目前还没有许多资源可用。但是,有一个基本的download page。