gpt4 book ai didi

Java - 使用按钮和鼠标单击创建自定义事件

转载 作者:行者123 更新时间:2023-12-01 15:36:33 25 4
gpt4 key购买 nike

我正在尝试创建一个自定义事件来监听并响应按钮的点击。该按钮表示为一个椭圆形,用 PaintComponent 方法绘制并显示在 JFrame 中。单击它时,它应该改变颜色,然后再次单击时返回到之前的颜色 - 就像开/关按钮一样。

我为它创建了一个界面:

public interface gListener {
public void gActionPerformed(GooEvent e);
}

事件监听器:

public class gEvent extends java.util.EventObject
{
private int x, y;
private int value;
private gComponent source;
final static int ON = 1;
final static int OFF = 0;

public gEvent(int x, int y, int val, gComponent source)
{
super(source);
this.x = x;
this.y = y;
value = val;
this.source = source;
}
}

代表按钮的组件类:

public abstract class gComponent {

//Link an arraylist to the gListener interface.
ArrayList <gListener> listeners = new ArrayList<gListener>();
int x, y, w, h;

public gComponent(int x, int y, int w, int h) {
this.x = x; this.y = y; this.w = w; this.h = h;
}

//Add listener to arraylist
public void addListener(gListener gl)
{
listeners.add(gl);
}

// Dispatches the gEvent e to all registered listeners.
protected void send (gEvent e){
e = new gEvent(x, y, w, this);
Iterator<GooListener> i = listeners.iterator();
while (i.hasNext())
{
((gListener) i.next()).gActionPerformed(e);
}
}
}

gComponent 类在按钮类 (gButton) 中进行了扩展,这是调用 PaintComponent 和 mouseClicked 方法的地方。最后...我有一个测试类,它扩展了 JPanel 并实现了 gListener 接口(interface)。主要方法如下所示:

public static void main(String[] args) {
// JFrame code goes here....


gButton button = new gButton(20,20,20,20); //Click oval shape

//Using addListener method from gComponent superclass.
//The 'this' code is throwing error: cannot use this in a static context.
button.addListener(this);
}

//Cause something to happen - stop/start animation.
public void gooActionPerformed(GooEvent e){


}

该事件应该通过单击按钮来触发,采用我编写代码的特殊格式。对于我在测试类中收到的错误的任何建议或其他任何建议,将不胜感激。非常感谢。

最佳答案

这简直是......令人惊叹。

但无论如何,像 main() 这样的静态方法中是没有 this 的。如果您想要一个具有 gooActionPerformed() 方法的对象,那么您需要创建 main() 出现的任何类的实例,并使用该实例代替

关于Java - 使用按钮和鼠标单击创建自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8757596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com