У меня есть файл .f xml с тегом <Label>
и <ImageView>
. В моем классе контроллера есть функция события, которая вызывается, ImageView обновляется, но моя метка остается прежней. Вся помощь определенно приветствуется.
Мой контроллер:
public class LayoutController implements BrowserPlaybackEvent {
@FXML
public ImageView currentTrack;
@FXML
public Label trackTitle;
SpotySync spotySync;
public LayoutController(){
this.spotySync = Main.spotySync;
spotySync.addBrowserPlaybackEventListerners(this);
}
@Override
public void browserPlaybackEvent(JSONObject playBackState) {
System.out.println("Layout controller handling browser event");
Track track = new Track((JSONObject) ((JSONObject) playBackState.get("track_window")).get("current_track"));
trackTitle.setText(track.name);
currentTrack.setImage(track.tAlbum.image);
}
}
.jf xml Файл:
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="729.0" prefWidth="861.0" styleClass="HBox" stylesheets="@stylesheet.css" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nl.nothic.spotysync.ui.LayoutController">
<children>
<Pane prefHeight="200.0" prefWidth="617.0" />
<Pane prefHeight="200.0" prefWidth="200.0" />
<Pane id="currentlyPlaying" maxHeight="300.0" minHeight="300.0" prefHeight="300.0" prefWidth="200.0">
<Label>
<graphic>
<ImageView fx:id="currentTrack">
<image>
<Image url="https://i.scdn.co/image/ab67616d00001e02eb9888357d422ff3e6bf0321" />
</image>
</ImageView>
</graphic>
</Label>
<Label fx:id="trackTitle" alignment="CENTER" layoutX="300.0" layoutY="14.0" prefHeight="45.0" prefWidth="550.0" text="Song title" textAlignment="CENTER" textFill="WHITE" wrapText="true">
<font>
<Font size="30.0" />
</font>
</Label>
</Pane>
</children>
</VBox>
Класс приложения:
public class Gui extends Application{
SpotySync spotySync = null;
@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getClassLoader().getResource("nl/nothic/spotysync/ui/Layout.fxml")));
Scene scene = new Scene(root,600,600);
scene.getStylesheets().add(getClass().getClassLoader().getResource("nl/nothic/spotysync/ui/stylesheet.css").toExternalForm());
primaryStage.setTitle("SpotySync");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void launch(){
Application.launch();
}
}
Проблема, которую я получаю, заключается в контроллере. При вызове browserPlaybackEvent воспроизводится новая дорожка, а приложение обновляется. Imageview (currentTrack) обновляется, также визуально в самом приложении. Я отладил код, и track.name является допустимым текстом, и объект также обновляется новым текстом. Однако в приложении обновляется только изображение.
Я потратил около часа, пытаясь определить проблему без результатов.
Заранее спасибо