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

时间:2012-01-06 12:09:49

标签: java events

我正在尝试创建一个自定义事件,用于侦听和响应按钮的点击。该按钮表示为椭圆形,在JFrame中显示的paintComponent方法中绘制。单击它时,它应该改变颜色,然后再次单击时返回到先前的颜色 - 如ON / OFF按钮。

我为它创建了一个界面:

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接口。主要方法如下所示:

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){


    }

该事件假设是通过单击按钮触发,以我编写代码的特定格式。 如我在测试课程中所述的错误或任何其他错误的任何建议将非常感激。非常感谢。

1 个答案:

答案 0 :(得分:1)

这简直......令人叹为观止。

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