我有一个带有几个按钮的GUI游戏,你按下这些按钮最终完成游戏。
我有以下布尔值来测试:
public boolean complete(){
if (initvalue==finalvaue)){
return true;
}
else {
return false;
}
}
我想创建一个监听器来检查游戏是否完成并向用户打印消息。我想我需要为此创建一个SimpleBooleanProperty
才能工作。但是我需要将它绑定到上面的布尔值吗?
最好的方法是什么?
答案 0 :(得分:5)
您可以拥有一个名为completedProperty
的{{3}},您可以initvalueProperty
和finalValueProperty
来存储游戏的积分,然后您可以简单地绑定值completedProperty
喜欢
completedProperty.bind(initValueProperty.isEqualTo(finalValueProperty));
因此你甚至不再需要一种方法。
在示例中,我刚刚放置了Button
,在按下时将当前值增加1,并且我使用3个属性来连续检查“游戏”状态。只要completedProperty
切换为“true”,就会显示带有“Game Over ”文字的Label
。
注意:我使用BooleanProperty
来存储当前值和最终值,但您可以使用任何IntegerProperty
。
示例:强>
public class Main extends Application {
private IntegerProperty initValueProperty = new SimpleIntegerProperty(0);
private IntegerProperty finalValueProperty = new SimpleIntegerProperty(10);
private BooleanProperty completedProperty = new SimpleBooleanProperty();
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,400,400);
Button buttonPlusOne = new Button("+1");
root.setCenter(buttonPlusOne);
Text currValueText = new Text();
currValueText.textProperty().bind(initValueProperty.asString());
root.setBottom(currValueText);
// Increment current value
buttonPlusOne.setOnAction(e -> initValueProperty.set(initValueProperty.get()+1));
// Bind completed property: initValue equals finalValue
completedProperty.bind(initValueProperty.isEqualTo(finalValueProperty));
completedProperty.addListener((observable, oldValue, newValue) -> {
// Only if completed
if (newValue)
root.setTop(new Label("Game Over"));
});
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
可选(正如Property
所述)您甚至可以使用fabian而不是属性来检查已完成状态(在这种情况下,您不需要completedProperty
),例如:
BooleanBinding completed = initValueProperty.isEqualTo(finalValueProperty);
completed.addListener((observable, oldValue, newValue) -> {
// Only if completed
if (newValue)
root.setTop(new Label("Game Over"));
});
首先要了解JavaFX BooleanBinding
中的属性。