所以,我在javafx中创建一个蛇和梯子游戏,当玩家落在梯子或蛇上时询问一个问题,并决定是否上升/上下蛇或者根据是否上下蛇答案是否正确。
我有一个问题类,可以创建一个新窗口并显示问题,以及一个回答它的地方,以及一个正确的'我希望的布尔值,当单击按钮时,返回主类。
由于EventHandlers无法直接返回值,我希望能说“如果这个'正确'变量已更改,执行getter方法获取并存储值'但我不知道如何创建一个监听器来检查值是否已经改变。
任何帮助将不胜感激!
答案 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 确认对话可能是您正在寻找的。 p>