swt绘图问题,教程上看来的代码在eclipse上不能用 10

packagedraw;importorg.eclipse.swt.events.PaintEvent;importorg.eclipse.swt.events.Pain... package draw;

import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Draw {
public static void main(String[] arg){
Display display =new Display();
Shell shell = new Shell(display);
shell.addPaintListener(new PaintListener(){
public void paintControl(PaintEvent e){
Rectangle clientArea = shell.getClientArea();
e.gc.drawLine(0,0,clientArea.width,clientArea.height);
}
});
shell.setSize(150,150);

}
}
这个时候编译有错误,按照提示把shell改成final运行之后没有窗口弹出
好了,成功了
展开
 我来答
手机用户21093
2011-09-09 · TA获得超过284个赞
知道答主
回答量:405
采纳率:0%
帮助的人:300万
展开全部
//这个在LINUX下做的(未在WIN下测试哦),交替画圆和方框
//: SWTDrawTest.java

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.*;
public class SWTDrawTest {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("SWT 交替画圆和方框");
shell.setLayout(new FillLayout());
C c = new C(shell,SWT.NONE);
shell.setBounds(300,100,300,300);
shell.layout(true);
shell.open ();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
c.dispose();
}
}

//用画布类来画图:
class C extends Canvas implements PaintListener,Runnable{
private int delayInMillis = 1000;//更新时间为1秒
private boolean sw;
private Color bgColor,fgColor;
public C(Composite parent, int style) {
super(parent, style);
this.addPaintListener(this);
this.bgColor = getDisplay().getSystemColor(SWT.COLOR_BLACK);
this.fgColor = getDisplay().getSystemColor(SWT.COLOR_GREEN);
new Thread(this).start();
}

//这个方法就是画图的主要方法
public void paintControl(PaintEvent e) {
GC g = e.gc;
g.setBackground(bgColor);
g.setForeground(fgColor);
g.fillRectangle(this.getClientArea());
int w = this.getClientArea().width;
int h = this.getClientArea().height;
int x = w/4,y=h/4;
w/=2;h/=2;
if(sw)
g.drawOval(x,y,w,h);
else
g.drawRectangle(x,y,w,h);
g.dispose();
}

public void run(){
while(true){
if(isDisposed())return;
getDisplay().asyncExec(new BackgroundThread());
trycatch(Exception e){}
}
}
//后台线程
private class BackgroundThread implements Runnable{
public void run(){
sw = !sw;
redraw();
}
}
}
CHHY行者无双
2011-09-07
知道答主
回答量:30
采纳率:0%
帮助的人:10.7万
展开全部
提示的什么错误啊?我没有见过public static void main(String[] arg){}
把arg换做 args ,试试
追问
哦,少打了个s,但还是跟之前一样
提示的是Cannot refer to a non-final variable shell inside an inner class defined in a different method
追答
那是说你搞的shell对象不能被调用,把他弄成全局变量,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百果园人
2011-09-22
知道答主
回答量:28
采纳率:0%
帮助的人:27.9万
展开全部
内部类使用外部变量时是要求外部变量是final的,这样外部变量才不会被无故释放掉。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式