当前位置: 技术问答>java相关
刚刚的帖子坏掉了~~再贴~~各位大虾帮我看看啊~`有详细说明~~~~谢谢~~!!
来源: 互联网 发布时间:2017-04-23
本文导语: 我想做1个Applet右边是个2个按扭b1是画圆按扭,b2是画线按扭~`中间是一个画布(Canvas),我想编1个点一下b1就可以在画布上自动捕捉鼠标点进行画圆,和点b2进行画线~程序如下: import java.awt.*; import java.awt.event.*; im...
我想做1个Applet右边是个2个按扭b1是画圆按扭,b2是画线按扭~`中间是一个画布(Canvas),我想编1个点一下b1就可以在画布上自动捕捉鼠标点进行画圆,和点b2进行画线~程序如下:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Exame extends Applet{
int X1,Y1,X2,Y2; //X1,Y1是鼠标按下的初始点,X2,Y2是当鼠标拖动时动态获取的点。
Panel p1 = new Panel();
Panel p2 = new Panel();
Button b1 = new Button("圆"); //按扭b1
Button b2 = new Button("直线"); //按扭b2
public void init(){
setLayout(new BorderLayout());
add("Center",p1); //把用来装画布的p1放在中间
add("East",p2); //把用来装2个按扭的p2放做右边
p1.setLayout(new BorderLayout());
p2.setLayout(new GridLayout(1,6));
p2.add(b1); //把b1和b2放入p2
p2.add(b2);
setSize(400,300);
setVisible(true);
//下面就是给b1设定监听器(用的是匿名监听)
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Drawyuan d = new Drawyuan(X1,Y1,((X2)-(X1)),((Y2)-(Y1)));//构造函数
p1.add("Center",d); //把d,即画布放入p1,我也不知道这样对不对
//在b1里也即是说一点b1就给画布设定下面的监听器
d.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
X2 = e.getX(); //抓点X2,Y2
Y2 = e.getY();
d.repaint(); //就是此处出错~!!!!!!!!!!!!!
}
});
d.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
X1 = e.getX(); //抓点X1,Y1
Y2 = e.getY();
}
});
}
});
//b2的监听器暂时还没弄~
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){}
});
}
public void start(){}
public void paint(){}
public void destroy(){
System.exit(0);
}
}
//下面就是继承于Canvas的类
class Drawyuan extends Canvas{
int a,b,c,d;
public Drawyuan(int x1,int y1,int x2,int y2){ //构造函数
a = x1;b= y1;c = x2;d = y2;
}
public void paint(Graphics g){
g.drawOval(a,b,c,d);
}
}
class Drawxian extends Canvas{
public void paint(Graphics g){}
}
错误就是上面说的那行:
local variable d is accessed from within inner class;needs to be
declared final
d.repaint();
1 error
我也不知道在点b1时动态向面板p1中加入画布d对不对~`
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Exame extends Applet{
int X1,Y1,X2,Y2; //X1,Y1是鼠标按下的初始点,X2,Y2是当鼠标拖动时动态获取的点。
Panel p1 = new Panel();
Panel p2 = new Panel();
Button b1 = new Button("圆"); //按扭b1
Button b2 = new Button("直线"); //按扭b2
public void init(){
setLayout(new BorderLayout());
add("Center",p1); //把用来装画布的p1放在中间
add("East",p2); //把用来装2个按扭的p2放做右边
p1.setLayout(new BorderLayout());
p2.setLayout(new GridLayout(1,6));
p2.add(b1); //把b1和b2放入p2
p2.add(b2);
setSize(400,300);
setVisible(true);
//下面就是给b1设定监听器(用的是匿名监听)
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Drawyuan d = new Drawyuan(X1,Y1,((X2)-(X1)),((Y2)-(Y1)));//构造函数
p1.add("Center",d); //把d,即画布放入p1,我也不知道这样对不对
//在b1里也即是说一点b1就给画布设定下面的监听器
d.addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
X2 = e.getX(); //抓点X2,Y2
Y2 = e.getY();
d.repaint(); //就是此处出错~!!!!!!!!!!!!!
}
});
d.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent e){
X1 = e.getX(); //抓点X1,Y1
Y2 = e.getY();
}
});
}
});
//b2的监听器暂时还没弄~
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){}
});
}
public void start(){}
public void paint(){}
public void destroy(){
System.exit(0);
}
}
//下面就是继承于Canvas的类
class Drawyuan extends Canvas{
int a,b,c,d;
public Drawyuan(int x1,int y1,int x2,int y2){ //构造函数
a = x1;b= y1;c = x2;d = y2;
}
public void paint(Graphics g){
g.drawOval(a,b,c,d);
}
}
class Drawxian extends Canvas{
public void paint(Graphics g){}
}
错误就是上面说的那行:
local variable d is accessed from within inner class;needs to be
declared final
d.repaint();
1 error
我也不知道在点b1时动态向面板p1中加入画布d对不对~`
|
内部类并不能访问外部类所定义的对象。除非内部类有外部类的对象的引用。
而匿名类不可能有外部类的引用。
因此监听器可以写一个内部类,并在初始化的时候将外部类实例的引用传进去。
还有一个更好的办法是
public class Exame extends Applet implements MouseMotionListener
然后:
d.addMouseMotionListener(this);
是否看懂?
而匿名类不可能有外部类的引用。
因此监听器可以写一个内部类,并在初始化的时候将外部类实例的引用传进去。
还有一个更好的办法是
public class Exame extends Applet implements MouseMotionListener
然后:
d.addMouseMotionListener(this);
是否看懂?
|
>内部类并不能访问外部类所定义的对象。除非内部类有外部类的对象的引用。
>而匿名类不可能有外部类的引用。
这样说是不对的。
对baozi3026 (星尘)的问题,
可以使d成为class Exame的成员,然后在匿名内部类中这样引用:
Exame.this.d
>而匿名类不可能有外部类的引用。
这样说是不对的。
对baozi3026 (星尘)的问题,
可以使d成为class Exame的成员,然后在匿名内部类中这样引用:
Exame.this.d