我现在的想法是在这个panel上四周放上透明的label,拖拽这些label,同时更改panel的大小.有没有更好的方法?

解决方案 »

  1.   

    呵呵,有一个问题,楼主如何判断哪里是你的Panel的边框呢?除非你的Panel填充色与背景色不同。找到了边框,你才知道鼠标该放在哪里拖动。其实,你完全不需要标签,只需要定义鼠标事件,当光标与Panel的边框很近的时候,按下鼠标拖动,在事件处理中就改变Panel的大小就可以了。
      

  2.   

    用label是觉得如果用鼠标事件的话,需要在mouseMove中,不停的判断,应该比较耗资源,而且在netbeans中没有找到moving这个事件,只有moved.如果用label,这样只要处理label的,mousEnter,MousExit,MousDragged事件就行了.
    我要做的panel确实和背景色不同.
      

  3.   

    如果你只处理Label的鼠标事件的话,你的Panel就不会随着拖动动态地改变大小了,这显然不是你想要的结果。另外,我看不出来,只要你想实现拖动的效果,拖动Panel和拖动Label有啥区别?不见得会多耗费资源的。
      

  4.   

    在label的鼠标事件中改变panel的大小,位置.
      

  5.   

    在netbeans中没发现有mouseMoving这个事件,这样就不能知道什么时候鼠标移动到了panel的边缘,该怎么办?
      

  6.   

    先取当前的Panel边框的值:记录下上下边框的y坐标和左右边框的x坐标,再获取鼠标的位置,当鼠标的坐标接近这两个值的时候,就说明到了边缘。
      

  7.   

    问题在于什么时候获取鼠标位置,不能开一个线程不停的去取值啊.C#里面有mouseMoving这个事件,可以在这个事件里取,但java中没有找到.
      

  8.   

    为什么不用JDesktopPane来实现呢?非要JPanel?
      

  9.   

    Java里怎么没有啊?!你去随便找一本教材,Java有MouseMotion事件,相应的为MouseMotionListener接口
    ,他有鼠标移动和鼠标拖动两个方法。原来你的问题是在这里啊。
      

  10.   

    严格地说,移动和拖动鼠标的时候发生的事件仍然是MouseEvent类型的,只不过,此时监视器实现的接口是MouseMotionListener接口 ,它和常规的鼠标动作处理的接口MouseListener不一样.
      

  11.   

    呵呵,刚用java不太懂.一会试试DesktopPane
      

  12.   

    在Eclipse的GUI框架SWT中,有一个组件叫做Tracker它自动实现了你所说的类似透明panel,鼠标在其边缘可以对其进行拖拽的效果由于这个SWT是开源的,所以我想直接去看这个Tracker类的代码,看看它是如何实现鼠标拖拽的,
    再仿照着使用,会更快一些