当前位置:  技术问答>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对不对~`

|
内部类并不能访问外部类所定义的对象。除非内部类有外部类的对象的引用。
而匿名类不可能有外部类的引用。

因此监听器可以写一个内部类,并在初始化的时候将外部类实例的引用传进去。
还有一个更好的办法是
public class Exame extends Applet implements MouseMotionListener

然后:
d.addMouseMotionListener(this);

是否看懂?

|
>内部类并不能访问外部类所定义的对象。除非内部类有外部类的对象的引用。
>而匿名类不可能有外部类的引用。
这样说是不对的。

对baozi3026 (星尘)的问题,
可以使d成为class Exame的成员,然后在匿名内部类中这样引用:
Exame.this.d

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 斑竹千万别删除这个帖子,不是散分,是答应了给分,很多斑竹又不让发帖子给!
  • 怎么只剩下一个帖子啦??我提问的帖子去哪里啦??--问大家linux下的声卡容易配置吗??
  • 请教,帖子回复的显示问题
  • 新手坛子里怎么找自己发的帖子?
  • 刚才庆祝Thunderbird发布的帖子居然被删
  • 怎么看到自己发过言的帖子?
  • hycao(海草),你在这个跟一个帖子,我把剩下的100分给你!
  • C# 正则表达式读取Discuz帖子中附件的代码举例
  • 我贴的帖子为什么总是莫名其妙没了?
  • 请问关于BEA公司的TUXEDO的帖子哪里有?
  • 看到很多人n年前的帖子不结~~怒~~ 散分~ 8点结贴~~
  • 看了许多帖子了,还是没有解决问题
  • 为什么不能编辑自己发的帖子?
  • 大家能帮忙看看这个帖子的问题吗?
  • 发个帖子
  • 【特别通知】超过一个月的帖子请及时结,否则强制结贴将扣除信誉分1分。
  • 这里有一个很重要的帖子....真的很重要..
  • 我为什么看不到我发的帖子??
  • 哇考,为什么在一个帖子里不能回复30次以上啊?这样子怎么和人家讨论问题啊?
  • 我觉得JAVA的帖子回复率很低,大家给斑竹提点意见怎么样?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3