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