swt gc 画图的一些问题

yzg000123 2009-03-17 06:10:23
例如: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的时候只画出新的直线而原来的直线让他消失呢,
谢谢,我的发言完了。

...全文
576 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzg000123 2009-03-18
  • 打赏
  • 举报
回复
shell.redraw();
谢谢各位的帮忙,在时间最后写上这个就行了,~
yanhan0615 2009-03-18
  • 打赏
  • 举报
回复
是这样的,如果你想去掉原来的很简单,就在你得到Graphaic之后,也就是
Graphics g = getGraphics();
这句代码后面画一次背景就行

例如,画一个白色的框
gc.setBackground(SWT.COLOR_WHITE);
gc.fillRectangle(...)
gc.setBackground(SWT.COLOR_BLACK);
gc.drawLine(a, 500, 300, 300);
yzg000123 2009-03-18
  • 打赏
  • 举报
回复
楼上的代码很好,以后可能用的到,可是不是我想要的,如过画新线的时候能去掉原来的就好了~
mzjmicrosoft 2009-03-17
  • 打赏
  • 举报
回复
老早的一个笔记给你翻出来了,希望对你有用.

//<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线程来控制的,该线程主要负责两种与显示更新相关的情况.
draco99 2009-03-17
  • 打赏
  • 举报
回复
再次画线之前,重绘一下窗口就行了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧