Наличие java-класса под названием Player, например:
public class Player {
private String playerName;
private int score;
public Player(String playerName) {
this.playerName = playerName;
this.score = 0;
}
public void incrementScore(int by) {
this.score+=by;
}
public String getPlayerName() {
return this.playerName;
}
}
Я просто хотел узнать, какой правильный способ обновить пользовательский интерфейс, подобный предоставленному, после того, как экземпляр Player изменит свой счет:
public class PlayerUI extends Application {
public static void main(String[] args) {
launch();
}
@Override
public void start(Stage primaryStage) throws Exception {
Player player = new Player("Mario");
VBox box = new VBox();
box.setSpacing(20.);
box.setPadding(new Insets(20.));
Text playerName = new Text("Player: " + player.getPlayerName());
Text score = new Text("Score: " + player.getPlayerScore());
Button incrementScore = new Button("Score up");
incrementScore.setOnAction(new IncrementScoreHandler(player, score));
box.getChildren().add(playerName);
box.getChildren().add(score);
box.getChildren().add(incrementScore);
Scene mainScene = new Scene(box);
primaryStage.setScene(mainScene);
primaryStage.setResizable(false);
primaryStage.show();
}
}
Я сделал это с помощью EventHandler, который получает игрока и вовлеченный узел в качестве параметра в конструкторе.
public class IncrementScoreHandler implements EventHandler<ActionEvent> {
private Player player;
private Text scoreText;
public IncrementScoreHandler(Player player, Text score) {
this.player = player;
this.scoreText = score;
}
@Override
public void handle(ActionEvent event) {
player.incrementScore(1);
this.scoreText.setText("Score: " + player.getPlayerScore());
}
}
Это правильно?Лучше ли провести рефакторинг Player
и позволить playerName
и получить оценку StringProperty
и IntegerProperty
?