JavaFX-Comment ajouter un élément à ListView à partir d'une étape différente?
Comment puis-je ajouter un élément à une vue de liste déjà existante à partir d'une étape différente (fenêtre).
Fondamentalement, je veux juste ajouter du texte à la ListView de la fenêtre 2 à la ListView de la fenêtre 1.
Merci d'avance.
Désolé j'ai oublié c'est ce que j'ai jusqu'à présent dans ma classe de contrôleur: (je suis un débutant en javafx ..)
(ci-dessous, j'essaie d'ajouter une chaîne à ListView mais cela ne fonctionne pas...et je ne sais pas pourquoi )
public class ClientGUIController implements Initializable {
@FXML private Text usernameText;
@FXML private Button cancelButtonNewDate;
@FXML private TextField newDateTitel,newDateJahr;
@FXML private TextArea newDateNotiz;
@FXML private ComboBox<String> newDateTag,newDateMonat,newDateStunde,newDateMinute;
@FXML private ListView<String> terminListView;
private ObservableList<String> termine =
FXCollections.observableArrayList();
private ObservableList<String> listItems = FXCollections.observableArrayList("Add Items here");
@Override
public void initialize(URL location, ResourceBundle resources) {
}
public Text getUsernameText() {
return usernameText;
}
public void setUsernameText(String username ) {
this.usernameText.setText(username);
terminListView.setItems(listItems);
listItems.add("test");
}
public void newDate() {
Stage newDate = new Stage();
Parent root;
try {
root = FXMLLoader.load(getClass().getResource("newDate.fxml"));
// FXMLLoader loader = new FXMLLoader();
// root = (Parent) loader.load(getClass().getResource("NewDate.fxml").openStream());
} catch (IOException e) {
e.printStackTrace();
return;
}
Scene sceneNewDate = new Scene(root);
// sceneNewDate.getStylesheets().add(getClass().getResource("Style.css").toExternalForm());
newDate.setTitle("Neuer Termin");
newDate.setScene(sceneNewDate);
newDate.show();
}
public void createNewDate() throws IOException {
// Termine meinTermin = new Termine(Integer.parseInt(newDateTag.getValue()), Integer.parseInt(newDateMonat.getValue()), Integer.parseInt(newDateJahr.getText()), newDateTitel.getText(), newDateNotiz.getText(),
// Integer.parseInt(newDateStunde.getValue()), Integer.parseInt(newDateMinute.getValue()));
//Add item to ListView
listItems.add("test"); <- this doesnt work
}
public void closeDialogue(){
Stage stage = (Stage) cancelButtonNewDate.getScene().getWindow();
stage.close();
}
}
1 answers
Une façon de le faire est de passer listItems
au contrôleur pour newDate.fxml
, donc il peut simplement ajouter à cette liste. Donc, en supposant que la classe de contrôleur pour newDate.fxml
est NewDateController
, vous feriez quelque chose comme:
public class NewDateController {
private ObservableList<String> data ;
public void setData(ObservableList<String> data) {
this.data = data ;
}
// other code as before...
// button handler:
@FXML
private void handleButtonPress() {
data.addItem("test");
}
}
Puis dans votre ClientGUIController
, chargez le fxml comme ceci:
public void newDate() {
Stage newDate = new Stage();
Parent root;
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("newDate.fxml"));
root = loader.load();
NewDateController controller = loader.getController();
controller.setData(listItems);
} catch (IOException e) {
e.printStackTrace();
return;
}
Scene sceneNewDate = new Scene(root);
newDate.setTitle("Neuer Termin");
newDate.setScene(sceneNewDate);
newDate.show();
}