diff --git a/src/main/java/fr/insa/clavardator/ui/chat/ChatHeaderController.java b/src/main/java/fr/insa/clavardator/ui/chat/ChatHeaderController.java index 084a68d..c613412 100644 --- a/src/main/java/fr/insa/clavardator/ui/chat/ChatHeaderController.java +++ b/src/main/java/fr/insa/clavardator/ui/chat/ChatHeaderController.java @@ -2,10 +2,12 @@ package fr.insa.clavardator.ui.chat; import fr.insa.clavardator.ui.users.UserActiveIndicatorController; import fr.insa.clavardator.users.PeerUser; +import javafx.application.Platform; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Label; +import java.beans.PropertyChangeEvent; import java.net.URL; import java.util.ArrayList; import java.util.ResourceBundle; @@ -16,12 +18,26 @@ public class ChatHeaderController implements Initializable { private Label remoteUsernameLabel; @FXML private UserActiveIndicatorController indicatorController; + private PeerUser user; @Override public void initialize(URL location, ResourceBundle resources) { } + private void onUsernameChange(PropertyChangeEvent propertyChangeEvent) { + if (propertyChangeEvent.getPropertyName().equals("username")) { + final String newUsername = (String) propertyChangeEvent.getNewValue(); + Platform.runLater(() -> remoteUsernameLabel.setText(newUsername)); + } + } + public void setRemoteUser(PeerUser remoteUser) { + if (this.user != null) { + // remove old observer before setting new user + this.user.removeObserver(this::onUsernameChange); + } + this.user = remoteUser; + user.addObserver(this::onUsernameChange); remoteUsernameLabel.setText(remoteUser.getUsername()); indicatorController.setUser(remoteUser); indicatorController.setSize(10.0); diff --git a/src/main/java/fr/insa/clavardator/ui/users/UserActiveIndicatorController.java b/src/main/java/fr/insa/clavardator/ui/users/UserActiveIndicatorController.java index 6ce832a..bdcf042 100644 --- a/src/main/java/fr/insa/clavardator/ui/users/UserActiveIndicatorController.java +++ b/src/main/java/fr/insa/clavardator/ui/users/UserActiveIndicatorController.java @@ -2,6 +2,7 @@ package fr.insa.clavardator.ui.users; import fr.insa.clavardator.users.PeerUser; import fr.insa.clavardator.util.Log; +import javafx.application.Platform; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.shape.Circle; @@ -34,7 +35,7 @@ public class UserActiveIndicatorController implements Initializable { if (propertyChangeEvent.getPropertyName().equals("state")) { final PeerUser.State newState = (PeerUser.State) propertyChangeEvent.getNewValue(); Log.v(this.getClass().getSimpleName(), "User state updated to " + newState.toString()); - updateState(newState == PeerUser.State.CONNECTED); + Platform.runLater(() -> updateState(newState == PeerUser.State.CONNECTED)); } }