EventListener不在Java中使用自定义组件

时间:2016-01-16 07:48:48

标签: java events awt

我正在尝试绘制一个响应鼠标事件的形状, 我想扩展可以注册到事件监听器的awt.component但是它没有工作,虽然它编译没有错误。

import java.awt.Component;
import java.awt.event.*;

class Ball extends Component{
    public Ball(){
        this.addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e){
                // Some event to be triggered
            }
        });
    }
}

以下是我使用appletviewer测试applet的示例(用于学习目的):

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.event.*;

public class Test extends Applet{
    Ball ball;

    public void init(){
        ball = new Ball();
    }

    public void paint(Graphics g){
        ball.paint(g);
    }
}


class Ball extends Component{
    int x, y;

    public Ball(){
        x = y = 50;
        this.addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e){
                x += 50;
                y += 50;
                repaint();
            }
        });
    }

    public void paint(Graphics g){
            g.fillOval(x, y, 25, 25);
        }
}

它仅在将事件侦听器分配给applet时才有效,如下面的代码所示:

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.event.*;

public class Test extends Applet{
    Ball ball;

    public void init(){
        ball = new Ball();

        this.addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e){
                ball.x += 50;
                ball.y += 50;
                repaint();
            }
        });
    }


    public void paint(Graphics g){
        ball.paint(g);
    }
}

class Ball extends Component{
    int x, y;
    public Ball(){
        x = y = 50;
    }

    public void paint(Graphics g){
            g.fillOval(x, y, 25, 25);
        }

}

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为repaint方法在Ball中调用时,只会重新绘制Ball对象,而不是小程序屏幕。

在applet中添加方法时,它会重新绘制applet屏幕。

所以,你自己已经解决了这个问题....你知道答案!我添加这个答案只是为了解释。

或者,您需要在repaint中添加Ball以更改位置,并在小程序中重新绘制它。