我正在尝试绘制一个响应鼠标事件的形状, 我想扩展可以注册到事件监听器的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);
}
}
答案 0 :(得分:0)
这种情况正在发生,因为repaint
方法在Ball
中调用时,只会重新绘制Ball
对象,而不是小程序屏幕。
在applet中添加方法时,它会重新绘制applet屏幕。
所以,你自己已经解决了这个问题....你知道答案!我添加这个答案只是为了解释。
或者,您需要在repaint
中添加Ball
以更改位置,并在小程序中重新绘制它。