首先,我作为一名网站程序员转向Java。在JavaScript中,添加mousemove、mouseover或click事件的方法只需要调用addEventListener函数即可。但是根据我有限的Java经验,你不能随便实现任何对象的MouseListener接口。
基本上,我现在有一个JPanel,可以绘制一些具有x/y/width/height值的形状(使用paint方法的CustomShape对象)。我想为形状对象添加某种类型的鼠标监听器,以便我可以为形状触发移动/滚动/单击事件。仅仅将MouseListener接口实现到CustomShape对象并不能起作用(这个显然很容易理解)。我已经查阅了如何设计自定义事件监听器,但似乎不可能创建自定义鼠标监听器。
最终,我决定将鼠标监听器添加到JPanel中,并循环遍历所有形状对象。如果形状对象附加了'listener',并且鼠标坐标验证了鼠标事件的发生,它就会触发该方法。最初,这是可以的,但随着应用程序的发展,它变得非常混乱。此外,我将无法将形状对象/接口复制到另一个应用程序中而不复制大量代码。
以下是简单的示例:(实际代码非常庞大)
Interface CustomShape{
int width, height, x, y;
void paint(Graphics g);
}
public class StarShape implements CustomShape{
int width, height, x, y;
public StarShape(){
width = 100;
height = 100;
x = 50;
y = 50;
}
void paint(Graphics g){
g.setColor(Color.black);
g.draw(new Rectangle(x,y,width,height));
}
}
public class Main extends JPanel{
StarShape check = new StarShape();
public Main(){ }
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
check.paint(g);
}
}
那么,我想知道是否有一种清晰的方法来为“手绘”形状实现某种类型的鼠标监听器。