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

tpxzln5u  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(237)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

5年前关门了。
改进这个问题
所以,我在javafx中创建了一个蛇和梯子的游戏,当玩家在梯子或蛇上着陆时,它会问一个问题,并根据答案是否正确来决定是否上梯子/下蛇。
我有一个question类,它创建一个新窗口并显示问题,以及回答问题的位置,还有一个“正确”的布尔值,我希望在单击按钮时返回到主类。
由于eventhandlers不能直接返回值,我希望说'如果这个'正确'变量的值发生了变化,执行getter方法来获取和存储值',但我不知道如何创建一个侦听器来检查值是否发生了变化。
任何帮助都将不胜感激!

nkkqxpd9

nkkqxpd91#

有一个为对话框构建的很好的api。它将成为官方javafxapi的一部分,但现在您可以使用单独的库:dialogs confirmation dialog可能就是您要找的。

wpcxdonn

wpcxdonn2#

我不知道你想要什么类型的监听器,但我在javafx changelistener上找到了这个http://docs.oracle.com/javafx/2/binding/jfxpub-binding.htm. 这也许能帮你开始

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);

}
}
qv7cva1a

qv7cva1a3#

我会这样做:

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();

相关问题