Slick2D中Java事件的个人实现

Slick2D中Java事件的个人实现,java,events,delegates,function-pointers,slick2d,Java,Events,Delegates,Function Pointers,Slick2d,我现在正在用Slick2D用Java制作自己的窗口系统,我想在我的窗口中添加按钮!问题是我对事件或诸如此类的事情一无所知。。。无论我在哪里看到的都是JFrames的事件,但我想自己制作它们。下面是我如何使用我的窗口 Window win = new Window("Window title", 0, 0, 300, 100); 那么这就是我现在所在的位置,在我从Window类继承的类中: @Override public void initializeComponents() { B

我现在正在用Slick2D用Java制作自己的窗口系统,我想在我的窗口中添加按钮!问题是我对事件或诸如此类的事情一无所知。。。无论我在哪里看到的都是JFrames的事件,但我想自己制作它们。下面是我如何使用我的窗口

Window win = new Window("Window title", 0, 0, 300, 100);
那么这就是我现在所在的位置,在我从Window类继承的类中:

@Override
public void initializeComponents() {

    Button button1 = new Button("Button caption", 0, 0, 50, 20);
    button1.setBackColor(Color.lightGray); // just an example of a set I'd use
    button1.setOnClickEvent(button1_OnClick); // this is where I can't get it to work!
    this.addComponent(button1);

}

public void button1_OnClick() {
    System.out.println("button1 was pressed");
}
我曾经做过C#,我也做过类似的委托,它很管用,但现在Java没有我读到的任何委托(我可能错了)。我基本上想知道是否有一个很好的方法来实现它,这样我就可以这样使用它了


非常感谢

您将需要调查这方面的问题


基本思想是,您将作为观察者(又名:listener)向按钮添加
this
,当按钮做了一些有趣的事情时,它会让其观察者知道,他们可以相应地行动,也可以不行动。

您不能将方法作为参数传递。您必须创建一个包含该方法的包装器类

比如:

public interface Callback {
    public void onMouseClick();
}

...

public class Button {
    ...
    public void setOnClickEvent(Callback c) {
        this.onClickEvent = c;
    }

    public void update() {
        if (clickDetected)
            onClickEvent.onMouseClick();
    }
}

...

button1.setOnClickEvent(new Callback() {
    public void onMouseClick() {
        button1_OnClick();
    }
}
你不能只通过一个方法。您必须创建一个包含该方法的包装器“回调”类。