那把你的画线代码添加到JPanel的paint()而不是JSplitPane的paint()

解决方案 »

  1.   

    重量组件放到轻量容器里面是会出现问题的,最好不要混用,免的处理起来麻烦,再说AWT本身提供的功能就少,除非是写Applet,希望客户端出的问题少点。
    另,实在没看懂你的需求,详细讲一讲吧,我的画图软件就用了JSplitPane和JScrollPane,这里确实有不少复杂的问题。相信我能帮你。
      

  2.   

    最好不要把AWT和SWING混用
    要把AWT转成SWING请参考
    http://java.sun.com/docs/books/tutorial/uiswing/converting/index.html
      

  3.   

    Jpanel可以放在JScrollPane 里
    如果要用好JSplitPane ,关于PreferredSize和MinimumSize, MaximumSize的区别一定要烂熟于胸.
      

  4.   

    谢谢各位。:)
    改写了一点,现在的情况是这样的:
    绘图是在 canvas ( extends Panel )里做的,canvas 放在 ScrollPane 里
    是为 right
    而 left 是 JScrollPanel, 里面内容是一个 JTree
    相关代码:
    JScrollPane left = new JScrollPane(tree);
    ScrollPane right = new ScrollPane();
    right.add( canvas );
    JSplitPanel jsp = new JSplitPanel( .... , true, left, right );
    jsp.setDividerLocation( 150 );
    ...现在可以正常显示了,因为右边用了AWT组件。
    不正常的地方是 divider 可以向左边拖动、或者拖回设定的位置 ( 左150 )
    但是不能向右拖——不奇怪,但是怎么解决呢?还有就是 AWT 里好像没有类似 JSplitPane 的组件吧
    不然也没这么麻烦了
    :)
      

  5.   

    楼主为什么不直接使用JPanel来画?
      

  6.   

    这个 canvas(Panel) 是远远大于屏幕范围的,用来画流程图之类的
    所以需要在 ScrollPane 里
      

  7.   

    我的意思是为什么不直接画在JPanel上,而是使用cancas?
      

  8.   

    canvas 是从 Panel 继承的,应该没有问题吧,
    只是加了几个事件处理函数而已
      

  9.   

    我也觉得用JPanel比较好一点
    毕竟Swing和AWT在一起总是怪怪的
      

  10.   

    问题解决了
    canvas 使用了 setBounds()
    改成 setLocation() & setPreferredSize() 以后
    就可以使用 JPanel 为画板, JScrollPane 为右容器了
    thank all