У меня есть корневой экран, который генерирует всплывающее окно, и во всплывающем окне у меня есть просмотр списка с кнопкой на нем, и я хочу обновить текстовое поле в корневом экране и закрыть всплывающее окно при нажатии кнопки во всплывающем окне. Код для всплывающего окна и его контроллера.
POPUP
public void display() throws IOException {
Stage window =new Stage();
FXMLLoader loader=new FXMLLoader();
Parent root = loader.load(getClass().getResource("/ProfilePopup.fxml"));
window.setTitle("Your profile");
window.setScene(new Scene(root, 400, 500));
window.show();
}
PopUPController
public void initialize() {
listView.setEditable(true);
listView.setVisible(true);
listView.setItems(walletModel.myWallets);
listView.setCellFactory(param -> {
try {
return new EditableCell();
} catch (IOException e) {
e.printStackTrace();
}
return null;
});
listView.layout();
addWalletButton.setOnMouseClicked(event -> {
walletModel.createWallet();
listView.getFixedCellSize();
size.setText("Total Wallets: " + walletModel.walletSize());
});
if (walletModel.myWallets.size() == 0) {
walletModel.initializeWalletData();
walletModel.myWallets.add(walletModel.initializeWalletData());
}
size.setText("Wallet Size " + walletModel.walletSize());
}
static class EditableCell extends ListCell<WalletModel.WalletData> {
private final WalletCellController controller;
EditableCell() throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/selectButton.fxml"));
Node graphic = loader.load();
controller = loader.getController();
setGraphic(graphic);
}
@Override
protected void updateItem(WalletModel.WalletData item, boolean empty) {
if (empty) {
controller.rootView.setVisible(false);
} else {
controller.textField.setText(item.getName());
controller.rootView.setVisible(true);
}
}
}
}
Я хочу, чтобы при просмотре списка кнопка обновляла корневой экран, а также закрывала всплывающее окно. Каждый просмотр списка получает графику из кода Walletcellcontroller, приведенного ниже.
Вот как я звоню с корневого экрана.
Создание экземпляра в корневом экране, а затем вызов
(Popup popup = new Popup ();)
public void popupOpen() throws IOException {
popup.display();
}
вот код для элемента списка
public class WalletCellController implements OnClick {
public Button select;
public TextField textField;
public AnchorPane rootView;
public void initialize(){
onMouseClicked();
}
public void onMouseClicked() {
select.setOnAction(closeEvent -> {
Node source = (Node) closeEvent.getSource();
Stage stage = (Stage) source.getScene().getWindow();
stage.close();
});
}}
Можете ли вы рассказать мне, как использовать обратные вызовы для экшн-событий здесь. Я думаю, что мне нужно перезвонить из контроллера POPUP в POPup, а затем из POPup в корневой экран.
Я новичок в Java, поэтому я не уверен в его реализации.