У меня проблема с заполнением ListView
в моем главном окне событиями на кнопку для объекта в другом открытом окне.
Я пробовал несколько вещей, но, кажется, никогда не получится, если я не сделаю это для кнопкисобытие в реальном окне, где находится ListView
.Я задавался вопросом, было ли это как-то связано с использованием экземпляра контроллера для главного окна, но я новичок в JavaFX, и я действительно не знаю, что я делаю, tbh.
Некоторые дополнительныеинформация:
Информация - это класс, в котором хранятся сведения, к которым мне нужно получить доступ более чем в одном классе контроллеров;
gastConrim
- это метод, вызываемый в другом открытом окне (AddEditGastController
);
последняя часть - это часть, которая работает (обновляя ее по событию кнопки в главном окне, где расположен ListView
), которая будет похожа на кнопку «update ListView», но это немного неудобно, если вам нужно обновитьListView
вручную.
public abstract class Infos {
public static String ID;
static Hotelsystem ht = new Hotelsystem();
public static Hotelsystem getHt(){
return ht;
}
static void alert(String titel, String content) {
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle(titel);
alert.setHeaderText(null);
alert.setContentText(content);
alert.show();
}
static boolean idAbfragen(String titel, String content, String alertContent) {
TextInputDialog dialog = new TextInputDialog();
dialog.setTitle(titel);
dialog.setHeaderText(null);
dialog.setContentText(content);
Optional<String> input = dialog.showAndWait();
if (!input.isPresent() || input.get().trim().isEmpty()) {
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle(titel);
alert.setHeaderText(null);
alert.setContentText(alertContent);
alert.showAndWait();
return false;
}
else {
ID = input.get();
return true;
}
}
static ObservableList<Gast> gastData = FXCollections.observableArrayList();
public static void updateGast() {
gastData.setAll(ht.getGastList());
}
}
@FXML
void gastConfirm(ActionEvent event) throws IOException {
FXMLLoader fxmlLoader= new FXMLLoader(getClass().getResource("../gui/mainWindowGast.fxml"));
Parent root = (Parent) fxmlLoader.load();
MWControllerGast controller = (MWControllerGast) fxmlLoader.getController();
double rabatt = 0.0;
if (gastNameInput.getText().trim().isEmpty() || anredeToggle.getSelectedToggle() == null || gastGB.getValue() == null || gastTfInput.getText().trim().isEmpty() ||
gastStrasseInput.getText().trim().isEmpty() || gastStadtInput.getText().trim().isEmpty() || gastLandInput.getText().trim().isEmpty()) {
Infos.alert("Fehler", "Es fehlen Informationen.");
}
else {
if (gastStatus.isSelected()) {
if (!gastRabattInput.getText().trim().isEmpty()) {
String rabattInput = gastRabattInput.getText();
if (rabattInput.contains(","))
rabattInput.replace(",", ".");
rabatt = Double.parseDouble(rabattInput);
Infos.getHt().getHinzufuegen().vipHinzufuegen(gastNameInput.getText(), gastAnredeRadio1.getText(), gastGB.getValue(), gastTfInput.getText(), gastStrasseInput.getText(), gastStadtInput.getText(), gastLandInput.getText(), rabatt);
}
Infos.ht.getHinzufuegen().vipHinzufuegen(gastNameInput.getText(), gastAnredeRadio1.getText(), gastGB.getValue(), gastTfInput.getText(), gastStrasseInput.getText(), gastStadtInput.getText(), gastLandInput.getText(), rabatt);
} else
Infos.ht.getHinzufuegen().gastHinzufügen(gastNameInput.getText(), gastAnredeRadio1.getText(), gastGB.getValue(), gastTfInput.getText(), gastStrasseInput.getText(), gastStadtInput.getText(), gastLandInput.getText());
System.out.println(rabatt);
gastNameInput.clear();
gastAnredeRadio1.setSelected(false);
gastAnredeRadio2.setSelected(false);
gastGB.setValue(null);
gastTfInput.clear();
gastStrasseInput.clear();
gastStadtInput.clear();
gastLandInput.clear();
gastStatus.setSelected(false);
gastRabattInput.clear();
Infos.updateGast();
controller.gastTable.getItems().setAll(Infos.gastData);
}
@FXML
ListView<Gast> gastTable;
public ListView<Gast> getGastTable() {
return gastTable;
}
@FXML
void sortieren(ActionEvent event) {
Infos.updateGast();
gastTable.getItems().setAll(Infos.gastData);
}
Ожидаемый результат: обновлять ListView
в gastConfirm
всякий раз, когда я добавляю новый объект.
Фактический результат: ничего не происходит.По крайней мере, ничего не вижу в консоли или пользовательском интерфейсеОн просто не добавляет объект в ListView
.