我想将滚动功能添加到javax.swing.JDesktopPane
。但是用javax.swing.JScrollPane
包裹并不会产生所需的行为。
Searching the web表明这已成为问题很长一段时间了。那里有some solutions,但它们似乎已经很老了,我对它们并不完全满意。
您知道哪些积极维护解决方案?
答案 0 :(得分:6)
我通过创建自己的JScrollableDesktopPane.
答案 1 :(得分:1)
我发现了这个:http://www.javaworld.com/javaworld/jw-11-2001/jw-1130-jscroll.html?page=1
这是一个很好的教程,有很多关于Swing&的解释和信息。所以,它允许创建一个包含大量内容的JscrollableDesktopPane。
您需要修改一些代码部分以满足您的要求。
享受!
答案 2 :(得分:1)
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
的内容。
希望这可以帮助那些人。