我想用swing画自定义的控件,如
我现在的问题是:
1、怎么画出这种形状
2、怎么让其大小可变(怎么控制其大小的改变)
3、怎么单独对线两端的小圆圈设置监听,让鼠标移动到原点上时可以拖动该线的位置谢谢!

解决方案 »

  1.   

    我想重写paintComponent()来改变控件的形状,可我只会用基本形状的函数,像方形、圆形等,就是不知道怎么画出个菱形后再在两边加上直线,而且该直线还可被鼠标拖动后改变长度,方向等
      

  2.   

    不用的,paintComponent()是标准包里的,画图的函数应该够用了,问题是怎么将菱形跟直线连到一块
      

  3.   

    通过坐标来将线和菱形连起来,也就是线的终点开始绘制菱形,绘制完后菱形的右边顶点为线的起点,可以在直线和菱形的交点处绘制一个圆,通过判断当前鼠标所在位置来确定是否可以移动线及菱形,如果用户按下鼠标时,鼠标的坐标在圆的范围内(x<圆点x-半径&&x>圆点x加半径,y<圆点y-半径&&y<圆点y+半径,也可以用awt中判断点是否在图形内的函数进行判断),用户进行拖拽时,可以实时计算鼠标位移并repaint(),也可以等用户释放鼠标按钮时再repaint,建议将菱形及线都抽象为对象,内部包含根据属性绘制自身的相关函数,到时候只要更改下其坐标己长度就可以了
      

  4.   

    意思就是将线跟菱形分开处理喽,画图是不是只用GRAPHICS2D,不用什么控件啊?如果是用GRAPHICS2D的话,怎么给画出来的东西添加监听?
      

  5.   

    点,线和棱形,可以是3个不同的JComponent,通过引用联系起来。
    在组件的paintComponent()中画出你想要的形状。
    当一个组件移动时,调用关联组件的setBounds()方法改变位置和形状。布局采用null。
    有兴趣可以重载JComponent的public boolean contains(int x , int y)方法。
      

  6.   

    通过继承JPanel,覆盖其paintComponet方法,在该方法内绘制你要绘制的东西,可以给该JPanel添加MouseListner(鼠标进入、离开、按下、释放)及MouseMontionListner(鼠标拖拽及移动)在对于的事件相应方法中实现你要实现的移动事件并repaint,注意按下及释放于拖拽之间的事件关系
      

  7.   

    我已经实现了,重载了paintComponent()、paintBorder()及contains(),谢谢大家!