【问题标题】:Javafx: How to add eventhandlers to another seperate classJavafx:如何将事件处理程序添加到另一个单独的类
【发布时间】:2016-09-04 04:39:49
【问题描述】:

我在场景的一个窗格中有两个按钮。我添加了这样的事件处理程序:

    Button reset=new Button ("Reset");
        reset.addEventHandler(MouseEvent.MOUSE_CLICKED,new EventHandler<MouseEvent>(){
        public void handle(MouseEvent event){
        System.out.println("reseting");
        model.reset();
        Play(stage);
    }});

  Button guess=new Button ("Guess");
  guess.addEventHandler(MouseEvent.MOUSE_CLICKED,new EventHandler<MouseEvent>(){
        public void handle(MouseEvent event){
        ArrayList<Integer> FullGuess=new ArrayList<Integer>();
        boolean condition=true;
        for (int y:fullGuess){
           if (y==0){
              condition=false;
           }
       }
   }});

我怎样才能在另一个类中做事件处理部分,而不是像我一样直接在类中做呢?

【问题讨论】:

  • 如果没有任何其他详细信息,回答者可能需要向您解释 OOA 的详细信息,这超出了答案的范围。
  • 在一个单独的类中定义您的 EventHandler,并在其构造函数中将调用者作为引用传递。然后通过上面的 addEventHandler 方法正常绑定它。然后,您仍然可以从外部定义的类中访问所有父调用者的公共方法。

标签: user-interface events javafx


【解决方案1】:

您的片段使用anonymous class 来处理事件,但您可以将匿名处理程序提升为封闭类的member 或具有package-private 访问权限的单独类。无论哪种情况,您都需要将所需的List&lt;Integer&gt; 作为参数传递。

List<Integer> fullGuess = new ArrayList<Integer>();
…
Button guess = new Button("Guess");
guess.addEventHandler(MouseEvent.MOUSE_CLICKED, new MyEventHandler(fullGuess));

在另一个文件中:

class MyEventHandler implements EventHandler<MouseEvent> {

    private final List<Integer> fullGuess;

    public MyEventHandler(List<Integer> fullGuess) {
        this.fullGuess = fullGuess;
    }

    @Override
    public void handle(MouseEvent event) {
        boolean condition = true;
        for (int y : fullGuess) {
            …
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多