0

我现在正在用 Slick2D 用 Ja​​va 制作我自己的窗口系统,我想在我的窗口中添加按钮!问题是我对事件或此类事情一无所知......我到处都是 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 没有任何委托,因为我读到了(我可能错了)。我基本上想知道是否有一个很好的方法来实现它,所以我可以这样使用它。

非常感谢!

4

2 回答 2

0

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

就像是:

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();
    }
}
于 2013-05-08T01:57:56.183 回答
-1

为此,您需要研究观察者模式

基本思想是您将this作为观察者(又名:侦听器)添加到按钮,当按钮做了一些有趣的事情时,它会让观察者知道并且他们可以相应地采取行动或不采取行动。

于 2013-05-08T01:52:10.477 回答