2013-05-08 2 views
0

지금 Slick2D로 자바에서 내 자신의 윈도우 시스템을 만들고있어 윈도우에 버튼을 추가하고 싶습니다! 문제는 내가 사건이나 그런 것에 대한 지식이 없다는 것입니다 ... 모든 곳에서 나는 JFrames를위한 사건이라고 생각합니다.하지만 나는 그것을 스스로 만들고 싶습니다. 나는 C# 및 I을 위해 사용Slick2D에서 자바 이벤트의 Personnal 구현

@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"); 
} 

: 내 창을 사용하는 방법 여기에 내가 Window 클래스에서 상속 내 수업 시간에, 지금 어디에 있어요

Window win = new Window("Window title", 0, 0, 300, 100); 

다음이가 ...입니다 델리게이트와 비슷한 것을했는데 효과가 있었지만, 지금 자바는 내가 읽었을 때 어떤 대표도 가지지 않았다. 기본적으로 이것을 구현하는 좋은 방법이 있는지 알고 싶습니다. 그래서이 방법으로 사용할 수 있습니다.

고맙습니다.

+0

당신은 * 단지 * 방법을 전달할 수 없습니다. 메서드가 포함 된 래퍼 "콜백"클래스를 만들어야합니다. – Supericy

답변

-1

이 경우 Observer Pattern을 조사하고 싶습니다.

기본 아이디어는 버튼에 Observer (일명 : 리스너)로 this을 추가하고 버튼이 뭔가 재미있는 일을하면 관찰자가 알 수있게하여 그에 따라 행동 할 수 있는지 아닌지에 대한 기본 아이디어입니다.

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(); 
    } 
} 
관련 문제