JScrollPane:如何自动调整滚动中包含的JPanel

时间:2011-03-07 10:00:35

标签: java swing resize jpanel jscrollpane

我正在开发一个小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);

知道我缺少什么吗?或者我应该随手调整容器的大小?

3 个答案:

答案 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)的大小。

在没有setMaximumSizesetPreferredSize的情况下尝试。添加/删除内容后,您可能还需要使面板或滚动窗格无效。

编辑:
我想我认为panel是你的包容。你能提供滚动窗格和容器的设置代码吗?

您是否为容器设置了布局管理器?

答案 2 :(得分:0)

另一种可能性,如果你不必自己做,可能是使用一些SwingX组件(如TaskPane等)。不幸的是,它们似乎正在向java.net过渡,因此截至目前还没有许多资源可用。但是,有一个基本的download page