12

我想将滚动功能添加到javax.swing.JDesktopPane. 但是包装 ajavax.swing.JScrollPane不会产生所需的行为。

在网上搜索表明,这已经是一个很长一段时间的问题了。有一些 解决方案,但它们似乎已经很老了,我对它们并不完全满意。

您知道哪些积极维护的解决方案?

4

3 回答 3

6

我通过创建自己的方法使用了JavaWorld 的解决方案JScrollableDesktopPane.

于 2008-09-29T13:56:10.210 回答
2

JavaworldJScrollableDesktopPane在他们的网站上不再可用。我设法找到了它的一些副本,但它们都不起作用。

我得出的一个简单的解决方案可以通过以下方式实现。这不是最漂亮的,但它肯定比默认行为更好。

public class Window extends Frame {
    JScrollPane scrollContainer = new JScrollPane();
    JDesktopPane mainWorkingPane = new JDesktopPane();

    public Window() {
        scrollContainer.setViewportView(mainWorkingPane);

        addComponentListener(new ComponentAdapter() {
            public void componentResized(ComponentEvent evt) {
                revalidateDesktopPane();
            }
        });
    }

    private void revalidateDesktopPane() {
        Dimension dim = new Dimension(0,0);
        Component[] com = mainWorkingPane.getComponents();
        for (int i=0 ; i<com.length ; i++) {
            int w = (int) dim.getWidth()+com[i].getWidth();
            int h = (int) dim.getHeight()+com[i].getHeight();
            dim.setSize(new Dimension(w,h));
        }
        mainWorkingPane.setPreferredSize(dim);
        mainWorkingPane.revalidate();
        revalidate();
        repaint();  
    }
}

这个想法是包装JDesktopPane在 aJScrollPane中,在主 Frame 上添加一个调整大小的侦听器,然后评估JDesktopPaneon resize 的内容(或添加新元素)。

希望这可以帮助那里的人。

于 2015-06-16T16:22:50.000 回答
1

我发现了这个:http ://www.javaworld.com/javaworld/jw-11-2001/jw-1130-jscroll.html?page=1

这是一个很好的教程,有很多关于 Swing 的解释和信息,它允许创建一个包含很多东西的 JscrollableDesktopPane。

您将需要修改一些代码部分以满足您的要求。

享受 !

于 2012-10-13T14:11:51.143 回答