私はJavaFXの新機能が非常に優れています。チェッカーゲームでは、誰が自分のボード上にいるかを表示したいと思います。私は複数の非常によく似た質問を読んだことがありますが、私が行きたいところに私をつかまえていないようです。あなたが私を助けることを願っています!ブール値に応じてラベルを変更するJavaFX
私は次のコードでFXMLファイルを持っている:私のゲームデータを表示するBooleanPropertyを持って
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());
}
}
:私のメインで
<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);
}
}
私のコントローラを誰がそれを回しているのですか?成功するたびに変更されます。
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();
}
私が理解している限り、私はinitializeメソッドで行った値にLabelをバインドする必要があります。しかし、私が遊んで、私のゲームクラスの価値が変わったとき、ラベルは同じままです。ラベルを更新するにはどうすればよいですか?私は変更リスナーを何かに追加する必要があると思うが、私はそれを行う方法、より具体的にはWHEREを知らない。
ありがとうございました!私は自分のコードを少し短くし、まだそれほど長くないことを願っています。
ベスト、initialize
で リサ
ありがとうございました!それは完璧に動作します! – Lisa