关于 JScrollPane ,应该也运到了不少了, 主要用在把 JTable 等 空间放在它里面,可以有滑动条;现在我有这样一个应运,是一个 自己扩展的 Canvas 组件,直接把它放在 JScrollPane 里面,当 Canvas 的大小 大于 JScrollPane 时,会遮盖住 JScrollPane ,没有在一个视口里显示;然后试着发现,所有能放在 JScrollPane  里的对象好象都实现了 Scrollable 接口,然手我也 让我自己的 Canvas 实现 Scrollable 这个接口;首先想请问下,我这样的思路是否正确,如果正确,Scrollable 里的方法具体能否详解一下,不甚感激! public Dimension getPreferredScrollableViewportSize() {
// 返回视口的大小,告诉JScrollPane  
return this.getPreferredSize();
} public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
//这个方法 不清楚
} public boolean getScrollableTracksViewportHeight() {
//如果视口总是强制此 Scrollable 的高度与视口高度匹配,则返回 true。
                            //上面这个是 API 里的解释,不过不是很明白,如果强制匹配的话,是不是我再改变内部组件的高度,始终是 视口的高度?
return false;
} public boolean getScrollableTracksViewportWidth() {
// 如果视口总是强制此 Scrollable 的宽度与视口宽度匹配,则返回 true。
                            //跟上面的方法类似,这个是宽度而已
return false;
}
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
        //鼠标滑轮时,或者拉动滑块时, 每次位移的增量             if (orientation == SwingConstants.HORIZONTAL) {
         //水平方向
                return 100;
            }
        return 10;
    }上面的这些方法,加了自己的一些理解,不知道正确与否,请高人指点下,再详细的补充下,谢谢!或者对于 我这样的实现,有什么其他的办法!

解决方案 »

  1.   

    UI 版 没有 SE 版 人气多啊,都不用  up ,还在第一页,无奈啊
      

  2.   

    把你的代码和不会做的地方标出来,让大家帮你看看
    滚动面板的使用应该没什么问题的。
    楼主所说的Canvas 放到 JScrollPane里面,直接使用边框布局,不用设置canvas的大小 ,设置滚动面板的大小就可以了
    这样就不会出现canvas超出JScrollPane的问题。
      

  3.   


    Canvas 放到 JScrollPane里面 ?? //怎么放?JScrollPane.add(component);?
    JScrollPane.setViewportView(Canvas );??JScrollPane.setLayout(new BorderLayout()); //你确定可以么 ?!!!
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: layout of JScrollPane must be a ScrollPaneLayout
      

  4.   

    Canvas是重量级组件,不要和轻量级的JScrollPane放在一起用,把JScrollPane 换成 java.awt.ScrollPane, 或者不要从Canvas派生,改从JComponent或JPanel派生
      

  5.   

    顶楼上的,用ScrollPane可以解决