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();
    }

}
Author: James_D, 2015-06-12

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();


}
 0
Author: James_D, 2015-06-12 19:15:13