可滚动的JDesktopPane



我想为javax.swing.JDesktopPane添加滚动功能。但是,在javax.swing.JScrollPane中进行包装并不能产生所需的行为。

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

您知道哪些主动维护的解决方案?

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

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

其想法是将JDesktopPane封装在JScrollPane中,在主帧上添加一个调整大小的侦听器,然后在调整大小(或添加新元素)时评估JDesktopPane的内容。

希望这能帮助到其他人。

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

这是一个很好的教程,有很多关于Swing&因此,这允许创建一个包含大量内容的JscrollableDesktopPane。

您需要对代码的某些部分进行一些修改,以满足您的需求。

享受吧!

相关内容

  • 没有找到相关文章

最新更新