gpt4 book ai didi

java - 根据 boolean 值 JavaFX 更改标签

转载 作者:搜寻专家 更新时间:2023-11-01 02:58:41 24 4
gpt4 key购买 nike

我是 JavaFX 的 super 新手,对于我的西洋跳棋游戏,我想在我的棋盘上方显示谁轮到它。我已经阅读了多个非常相似的问题,但它似乎并没有让我到达我想去的地方。我希望你能帮助我!

我有一个包含以下代码的 FXML 文件:

<HBox fx:id="topBox" alignment="TOP_CENTER" prefHeight="45.0" prefWidth="200.0" spacing="10.0" BorderPane.alignment="CENTER" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.SampleController">
<children>
<Label fx:id="labelTurn" text="test" />
<Button fx:id="buttonResign" alignment="CENTER" mnemonicParsing="false" onAction="#doResign" prefHeight="25.0" prefWidth="80.0" text="Resign" />
</children>
</HBox>

主要是:

public class Main extends Application {

Checkers content = new Checkers();
BorderPane border = new BorderPane();

@Override
public void start(Stage primaryStage) throws Exception {
try {
border.setTop(FXMLLoader.load(getClass().getResource("Sample.fxml")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
border.setCenter(createContent());
Scene scene = new Scene(border);
primaryStage.setTitle("Checkers from main");
primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}

我的 Controller :

public class SampleController {
@FXML
private Label labelTurn;

@FXML
private HBox topBox;

@FXML
private Button buttonResign;

private Checkers content = new Checkers();

@FXML
void doResign(ActionEvent event) {
content.resign();
// System.exit(0); //TODO eine tatsächliche Methode eingeben!!

}

public void setLabelTurn(Label labelTurn) {
this.labelTurn = labelTurn;

String setLabelText() {
String s = " ";
if (content.getWhiteTurnPropValue()) {
labelTurn.setText("White, it is your turn.");
s = "White, it is your turn.";
return s;
} else {
labelTurn.setText("Black, it is your turn.");
s = "Black, it is your turn.";
return s;
}
}
@FXML
void initialize() {
assert buttonResign != null : "fx:id=\"buttonResign\" was not injected: check your FXML file 'Sample.fxml'.";
assert topBox != null : "fx:id=\"topBox\" was not injected: check your FXML file 'Sample.fxml'.";
assert labelTurn != null : "fx:id=\"labelTurn\" was not injected: check your FXML file 'Sample.fxml'.";
labelTurn.textProperty().setValue(setLabelText());
}
}

我的游戏数据有一个 boolean 属性来显示轮到谁了。它在每次成功移动后都会发生变化。

BooleanProperty whiteTurnProp = new SimpleBooleanProperty(true);

public BooleanProperty getWhiteTurnProp() {
return whiteTurnProp;
}

public void setWhiteTurnPropValue(Boolean whiteTurn) {
this.whiteTurnProp.setValue(whiteTurn);
}

public boolean getWhiteTurnPropValue() {
return this.whiteTurnProp.getValue();
}

据我所知,我需要将标签绑定(bind)到值,这是我在初始化方法中完成的。但是当我玩游戏并且我的游戏类中的值发生变化时,标签保持不变。如何更新标签?我想我需要为某些东西添加一个更改监听器,但我不知道该怎么做,更具体地说是在 WHERE。

非常感谢您的帮助!我稍微缩短了我的代码,希望它不会太长。

最好的,丽莎

最佳答案

initialize 中:labelTurn.textProperty().setValue(setLabelText()); 不是绑定(bind),它是对属性的简单设置。一个非常奇怪的方法是 setLabelText() 设置 Label 的文本并返回设置的字符串,该值再次用于 的文本标签

您可以创建一个真正的绑定(bind):

labelTurn.textProperty().bind(Bindings.createStringBinding(() -> {
String s = " ";
if (content.getWhiteTurnProp().get())
s = "White, it is your turn.";
else
s = "Black, it is your turn.";

return s;
}, content.getWhiteTurnProp()));

关于java - 根据 boolean 值 JavaFX 更改标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43910652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com