请问java怎样在界面上画一个线条,然后又可以编辑它,也就是画完了之后可以选中,两头出现矩形,可以拖动,可以拉长,缩短,就像在word里画直线一样
我知道用graphics2d.drawLine,可是用这个不能编辑,
请高手指点

解决方案 »

  1.   

    package com.jack;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    public class MoveLine extends JFrame{
        public MoveLine(){
            MyLinePane p = new MyLinePane(10,10,100,100);
            p.setSize(400,400);
            setContentPane(p);
            setSize(500,500);
        }    public static void main(String[] args) {
            MoveLine ml = new MoveLine();
            ml.setVisible(true);
            ml.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
        }
    }
    class MyLinePane extends JPanel implements MouseListener,MouseMotionListener{
        int x1,x2,y1,y2;//当前值
        int oldx1,oldy1,oldx2,oldy2;//原始值
        boolean selected=false;
        boolean move=false;
        public MyLinePane(int x1,int y1,int x2,int y2){
          this.x1=x1;
          this.x2=x2;
          this.y1=y1;
          this.y2=y2;
          this.oldx1=x1;
          this.oldx2=x2;
          this.oldy1=y1;
          this.oldy2=y2;
          this.addMouseListener(this);
          this.addMouseMotionListener(this);
        }
        
    public void paintComponent(Graphics g){
         super.paintComponent(g);
         g.drawLine(x1,y1,x2,y2);
         if(selected){
             g.fillRect(x1,y1,x1+1,y1+1);
             g.fillRect(x2,y2,x2+1,y2+1);
         }
         //此处根据状态,selected,move 编写方法
         //每次擦掉原来的线和点,绘制新的线和点
        
    }
    //以下几个方法中判断当前的操作,并纪录坐标
    public void mouseDragged(MouseEvent e){
        
    }
    public void mouseMoved(MouseEvent e){
        
    }public void mouseClicked(MouseEvent e){
        if(e.getButton()==MouseEvent.BUTTON1){
            selected=true;   
           }
        this.updateUI();
    }
    public void mousePressed(MouseEvent e){
       
    }
    public void mouseReleased(MouseEvent e){
        
    }
    public void mouseEntered(MouseEvent e){
        
    }
    public void mouseExited(MouseEvent e){
        
    }}
      

  2.   

    在panel中加入mouse listener,当鼠标发生变化的时候,在panel 的repaint 函数中重新画线
      

  3.   

    我认为在选择这个过程中,应该你要画的线当作一个对象,这个对象有一个Boundary,也就是该线的一个边界,当你的鼠标在画布上拖动的痕迹经过你的线时候,表示选中线,这里面还涉及到映射转换。然后象楼上的那样,重新backDraw(),最近也在做这个东西,用了线形四叉树,都快死人了
      

  4.   

    http://spaces.msn.com/zhagy/blog/cns!8644356CCB7037FE!150.entry