Cześć.
Kiedy dodaję obiekt do ListView i próbuję dodać kolejny, ten poprzedni jest podmieniany na nowy i nie wiem dlaczego.
Prosiłbym o pomoc.

Oto kod:

package sample.dialog;

import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.util.Callback;

import java.io.File;

public class DialogController {

    @FXML
    private Button folderButton;
    @FXML
    private TextField fileDirectory;
    @FXML
    private TextField fileName;
    @FXML
    private Button saveButton;

    private File selectedFile;
    private ListView<File> listView;
    private boolean ownTitle = false; // Czy użytkownik wybrał własną nazwę pliku

    public DialogController(ListView<File> listView){
        this.listView = listView;
    }

    @FXML
    public void initialize(){
        Image image = new Image(getClass().getResourceAsStream("folder_icon.png"));
        folderButton.setGraphic(new ImageView(image));
        fileDirectory.setEditable(false);
    }

    @FXML
    private void fileChoose(){
        FileChooser chooser = new FileChooser();
        FileChooser.ExtensionFilter filters = new FileChooser.ExtensionFilter("PDF","*.pdf", "*.PDF");

        chooser.getExtensionFilters().add(filters);
        chooser.setTitle("Choose File");

        selectedFile = chooser.showOpenDialog(folderButton.getScene().getWindow()); // Zapisanie wybranego pliku do zmiennej selectedFile
        fileDirectory.setText(selectedFile.getAbsolutePath());
    }

    @FXML
    private void save(){

            if(selectedFile != null)
            {
                listView.getItems().setAll(selectedFile);

                if(fileName.getText().length() > 0){ // Jeśli użytkownik wpisał własną nazwę pliku
                    ownTitle = true;
                    cellFactory(fileName.getText());
                }else{
                    cellFactory(selectedFile.getName());
                }
            }else{
                Alert alert = new Alert(Alert.AlertType.INFORMATION);
                alert.setTitle("No File Selected");
                alert.setHeaderText(null);
                alert.setContentText("Please choose file before saving.");

                alert.showAndWait();
            }

    }

    @FXML
    private void back(){
        ((Stage)folderButton.getScene().getWindow()).close();
    }

    private void cellFactory(final String name){

        listView.setCellFactory(new Callback<ListView<File>, ListCell<File>>() {
            @Override
            public ListCell<File> call(ListView<File> param) {
                return new ListCell<File>(){

                    @Override
                    protected void updateItem(File item, boolean empty){
                        super.updateItem(item, empty);

                        if(empty || item == null){

                        }
                        else{

                            if(ownTitle){
                                setText(name);
                                ((Stage)saveButton.getScene().getWindow()).close();
                            }
                            else { // Jeśli użytkownik wybrał domyślną nazwę pliku, to z nazwy usuwane jest jego rozszerzenie
                                String cut = name.substring(0, item.getName().length() - 4);
                                setText(cut);
                                ((Stage)saveButton.getScene().getWindow()).close();
                            }
                        }
                    }
                };
            }
        });
    }
}