可滚动的JDesktopPane?

我想向 .但是,包装在 中不会产生所需的行为。javax.swing.JDesktopPanejavax.swing.JScrollPane

搜索网络显示,这已经存在了很长一段时间。有一些解决方案,但它们似乎已经很老了,我对它们并不完全满意。

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


答案 1

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


答案 2

Javaworld's在他们的网站上不再可用。我设法搜刮了一些副本,但没有一个工作。JScrollableDesktopPane

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

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();  
    }
}

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

希望这有助于那里的人。


推荐