EventListener不在Java中的自定义组件上工作
我想画一个对鼠标事件有反应的形状, 我想扩展可以注册到事件侦听器的awt.component,但它不起作用,尽管它编译时没有错误EventListener不在Java中的自定义组件上工作,java,events,awt,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 mousePres
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测试小程序的一个示例(用于学习目的):
仅当事件侦听器分配给小程序时,它才起作用,如下代码所示:
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);
}
}
这是因为在
Ball
中调用repait
方法时,只重新绘制Ball
对象,而不重新绘制小程序屏幕
在小程序中添加方法时,它会重新绘制小程序屏幕
所以,你自己解决了这个问题。。。。你知道答案!我添加这个答案只是为了解释
或者,您需要在两者中添加
repait
,在Ball
中更改位置,并在applet中重新绘制。它在我的机器上工作,你能发布一个工作示例来看看你是如何使用Ball的吗?也许这有助于解决你的问题problem@JRowan我更新了一个我正在测试的简单示例,我是作为Java应用程序而不是Java小程序运行的,我不确定小程序,但也许这就是小程序类中鼠标侦听器的实现方式,但我可能错了
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);
}
}