布尔值更改时,在单独的类中执行代码

时间:2015-01-15 15:02:13

标签: java javafx

所以,我在javafx中创建一个蛇和梯子游戏,当玩家落在梯子或蛇上时询问一个问题,并决定是否上升/上下蛇或者根据是否上下蛇答案是否正确。

我有一个问题类,可以创建一个新窗口并显示问题,以及一个回答它的地方,以及一个正确的'我希望的布尔值,当单击按钮时,返回主类。

由于EventHandlers无法直接返回值,我希望能说“如果这个'正确'变量已更改,执行getter方法获取并存储值'但我不知道如何创建一个监听器来检查值是否已经改变。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

我会做这样的事情:

public class Question {

    public enum State {UNANSWERED, CORRECT, INCORRECT} 

    private final ReadOnlyObjectWrapper<State> state 
        = new ReadOnlyObjectWrapper<>(State.UNANSWERED);

    public ReadOnlyObjectProperty<State> stateProperty() {
        return state.getReadOnlyProperty() ;
    }

    public final State getState() {
        return stateProperty().get();
    }

    private Button button ;

    public Question() {
        // ...
        button = new Button(...);
        button.setOnAction( event -> {
            if (checkAnswer()) {
               state.set(State.CORRECT);
            } else {
               state.set(State.INCORRECT);
            }
        });
        // etc..

    }

    public void showWindow() {
        // display window with question and controls, etc...
    }
}

然后你可以做

Question question = new Question();
question.stateProperty().addListener((obs, oldState, newState) -> {
    if (state == Question.State.CORRECT) { /* ...*/}
    else if (state == Question.State.INCORRECT) { /* ... */}
});
question.showWindow();

答案 1 :(得分:0)

我不知道你想要什么类型的监听器,但我在http://docs.oracle.com/javafx/2/binding/jfxpub-binding.htm为javafx changelistener找到了这个。这可能会帮助您入门

package propertydemo;

import javafx.beans.value.ObservableValue;
import javafx.beans.value.ChangeListener;

public class Main {

public static void main(String[] args) {

  Bill electricBill = new Bill();

   electricBill.amountDueProperty().addListener(new ChangeListener(){
    @Override public void changed(ObservableValue o,Object oldVal, 
             Object newVal){
         System.out.println("Electric bill has changed!");
    }
  });

  electricBill.setAmountDue(100.00);

}
}

答案 2 :(得分:-2)

为Dialogs构建了一个很棒的API。它将成为官方JavaFX API的一部分,但是现在您可以使用单独的库: Dialogs 确认对话可能是您正在寻找的。