У меня есть ImageView, вложенное в стек в моем приложении JavaFX:
UiManager.java
@Override
public void start(Stage primaryStage) {
logger.info("Starting UI...");
//Set the application icon.
primaryStage.getIcons().add(getImage(ICON_APPLICATION));
try {
mainWindow = new MainWindow(primaryStage, logic);
mainWindow.show(); //This should be called before creating other UI parts
mainWindow.fillInnerParts();
} catch (Throwable e) {
logger.severe(StringUtil.getDetails(e));
showFatalErrorDialogAndShutdown("Fatal error during initializing", e);
}
}
MainWindow.java
// Independent Ui parts residing in this Ui container
private ImagePanel imagePanel;
private PersonListPanel personListPanel;
private ResultDisplay resultDisplay;
private HelpWindow helpWindow;
@FXML
private StackPane imagePlaceholder;
@FXML
private StackPane commandBoxPlaceholder;
@FXML
private MenuItem helpMenuItem;
@FXML
private StackPane personListPanelPlaceholder;
@FXML
private StackPane resultDisplayPlaceholder;
@FXML
private StackPane statusbarPlaceholder;
void fillInnerParts() {
imagePanel = new ImagePanel();
imagePlaceholder.getChildren().add(imagePanel.getRoot());
personListPanel = new PersonListPanel(logic.getFilteredPersonList(), logic.selectedPersonProperty(),
logic::setSelectedPerson);
personListPanelPlaceholder.getChildren().add(personListPanel.getRoot());
resultDisplay = new ResultDisplay();
resultDisplayPlaceholder.getChildren().add(resultDisplay.getRoot());
StatusBarFooter statusBarFooter = new StatusBarFooter(logic.getAddressBookFilePath(), logic.getAddressBook());
statusbarPlaceholder.getChildren().add(statusBarFooter.getRoot());
CommandBox commandBox = new CommandBox(this::executeCommand, logic.getHistory());
commandBoxPlaceholder.getChildren().add(commandBox.getRoot());
//imagePlaceholder.getChildren().add(imagePanel.getRoot());
}
ImagePanel.java
public class ImagePanel extends UiPart<Region> {
private static final String FXML = "ImagePanel.fxml";
@FXML
private ImageView imageView;
public ImagePanel() {
super(FXML);
imageView.setImage(new Image("/assets/1.png"));
}
public void updateView() {
imageView.setImage(new Image("/assets/3.png"));
}
}
Я извлек соответствующие части, учитывая, что я на самом деле изменяю существующий проект.
Здесь я попытался создать отдельный метод updateView()
, который я бы назвал в своем классе другим классом как new ImagePanel().updateView()
Но в этом случае, как бы я ни вызывал updateView()
, изображение не меняется.