例如:public int a=500;
public void testa(Shell shell,int a){
GC gc = new GC(shell);
gc.drawLine(a, 500, 300, 300);


}就想上面的代码,是一个类,里面有个画直线的方法。其中我向这个方法传入一个参数,a 我在写一个BUTTON单击事件 button.addSelectionListener(new SelectionAdapter()
 {
 public void widgetSelected(final SelectionEvent e) {  
shell.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {

 }
 });
BUTTON里的代码我就不写了,这里用botton事件里调用了,那个画直线的方法,目的是我没点一次button    a的值就能+1,这些效果都出来了,可是,没点一次button就会画出一条新的直线,
原来的直线还是存在,我想问的是,怎么才能点击button的时候只画出新的直线而原来的直线让他消失呢,
谢谢,我的发言完了。

解决方案 »

  1.   

    老早的一个笔记给你翻出来了,希望对你有用.
    //<8.4>GUI组件上的图形操作:
    //1. Graphics类:
    //还是通过画线例子吧……….
    //代码;
    import java.awt.*;
    import java.awt.event.*;
    public class DrawLine
    {
    Frame f=new Frame("画线");
    public static void main(String [] args)
     {
    new DrawLine().init();
    }
    public void init()

    f.setSize(300,300);
    f.setVisible(true);
    f.addMouseListener(new MouseAdapter()
    {
    int orgX;
    int orgY;
    public void mousePressed(MouseEvent e)
    {
    orgX=e.getX();
    orgY=e.getY();
    }
    public void mouseReleased(MouseEvent e)
    {
    Graphics g=f.getGraphics();
       g.setColor(Color.red);
     g.drawLine(orgX,orgY,e.getX(),e.getY());
    }
    });
    }
    }在上面的画线中,我们发现把它最小化或者最大化后,画的线不见了,这一过程称为:”暴光”,这种情况随时会发生,所以我们要在组件上重绘下.
    修改下:
     import java.awt.*;
          import java.awt.event.*;public class ReDrawLine extends Frame
     {

    int orgX;
    int orgY;
    int endX;
    int endY;
    public static void main(String[] args) 
    {
    ReDrawLine rdl = new ReDrawLine(); rdl.init();
    }
    public void paint(Graphics g)
    {
    g.drawLine(orgX,orgY,endX,endY);
    }

    public void init()
    {
    this.addMouseListener(new MouseAdapter(){
    public void mousePressed(MouseEvent e)
    {
    orgX=e.getX();
    orgY=e.getY();
    }
    public void mouseReleased(MouseEvent e)
    {
    endX=e.getX();
    endY=e.getY();
    Graphics g = getGraphics();
    g.setColor(Color.RED);
    g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));//设置文本的字体
    g.drawString(orgX+","+orgY,orgX,orgY);
    g.drawString(endX+","+endY,endX,endY);//打印鼠标释放时的坐标文本
    g.drawLine(orgX,orgY,endX,endY);
    }
    });
    this.setSize(300,300);
    this.setVisible(true);
    }
    } 要知道,显示更新是有AWT线程来控制的,该线程主要负责两种与显示更新相关的情况.
      

  2.   

    是这样的,如果你想去掉原来的很简单,就在你得到Graphaic之后,也就是
    Graphics g = getGraphics();
    这句代码后面画一次背景就行例如,画一个白色的框
    gc.setBackground(SWT.COLOR_WHITE);
    gc.fillRectangle(...)
    gc.setBackground(SWT.COLOR_BLACK);
    gc.drawLine(a, 500, 300, 300); 
      

  3.   

    shell.redraw();
    谢谢各位的帮忙,在时间最后写上这个就行了,~