Hallo Männers, ich brauche mal hilfe.
Ich bin grade dabei ein Programm zu schreiben, wo ich JPGs aus einem Ordner anzeigen lassen kann und das adde ich in eine ListView, wenn die JPGs im Ordner nicht mehr gebraucht werden, soll man den ganzen Ordner löschen können, aber das geht nicht.
Wenn ich die ListView gefüllt habe kann ich den Ordner nicht mehr löschen.
Die Ordnerstruktur sieht oft so aus.
- Ordner 1
--- Ordner 11
----- 1.jpg
----- 2.jpg
--- Ordner 12
----- 1.jpg
----- 2.jpg
- Ordner 2
--- Ordner 21
----- 1.jpg
----- 2.jpg
In "Ordner 1" z.B. können auch noch viel mehr Unterordner sein und wenn die JPGs nicht mehr gebraucht werden, dann soll der "Ordner 1" gelöscht werden.
Aber das klappt eben nicht und ich weiss langsam nicht mehr weiter, wie ich die JPGs unlocked bekommen soll.
HILFE, bitte!!!
Hier mal ein Beispiel, was ich schnell geschrieben habe.
Ich bin grade dabei ein Programm zu schreiben, wo ich JPGs aus einem Ordner anzeigen lassen kann und das adde ich in eine ListView, wenn die JPGs im Ordner nicht mehr gebraucht werden, soll man den ganzen Ordner löschen können, aber das geht nicht.
Wenn ich die ListView gefüllt habe kann ich den Ordner nicht mehr löschen.
Die Ordnerstruktur sieht oft so aus.
- Ordner 1
--- Ordner 11
----- 1.jpg
----- 2.jpg
--- Ordner 12
----- 1.jpg
----- 2.jpg
- Ordner 2
--- Ordner 21
----- 1.jpg
----- 2.jpg
In "Ordner 1" z.B. können auch noch viel mehr Unterordner sein und wenn die JPGs nicht mehr gebraucht werden, dann soll der "Ordner 1" gelöscht werden.
Aber das klappt eben nicht und ich weiss langsam nicht mehr weiter, wie ich die JPGs unlocked bekommen soll.
HILFE, bitte!!!
Hier mal ein Beispiel, was ich schnell geschrieben habe.
Java:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
public class ListViewImageBrowser extends Application {
File saveFile;
@Override
public void start(Stage primaryStage) {
ObservableList<Path> imageFiles = FXCollections.observableArrayList();
TextField directoryField = new TextField();
directoryField.setPrefWidth(600);
Button browseButton = new Button("Browse");
Button loadButton = new Button("Load");
loadButton.setPrefWidth(50);
TextField directoryFieldDel = new TextField();
directoryFieldDel.setPrefWidth(600);
Button delBrowseButton = new Button("Browse");
Button delButton = new Button("Delete");
EventHandler<ActionEvent> loadHandler = event -> imageFiles.setAll(load(Paths.get(directoryField.getText())));
loadButton.setOnAction(loadHandler);
directoryField.setOnAction(loadHandler);
browseButton.setOnAction(event -> {
DirectoryChooser chooser = new DirectoryChooser();
File file = chooser.showDialog(primaryStage);
if (file != null) {
directoryField.setText(file.toString());
imageFiles.setAll(load(file.toPath()));
}
});
delButton.setOnAction(event -> {
del(saveFile.getParentFile());
});
delBrowseButton.setOnAction(event -> {
DirectoryChooser chooser = new DirectoryChooser();
File file = chooser.showDialog(primaryStage);
saveFile = file;
if (file != null) {
directoryFieldDel.setText(file.toString());
}
});
HBox controls = new HBox(directoryField, browseButton, loadButton);
controls.setAlignment(Pos.CENTER);
controls.setSpacing(5);
HBox controls2 = new HBox(directoryFieldDel, delBrowseButton, delButton);
controls2.setAlignment(Pos.CENTER);
controls2.setSpacing(5);
VBox vBox = new VBox(controls, controls2);
vBox.setSpacing(5);
ListView<Path> imageFilesList = new ListView<>(imageFiles);
imageFilesList.setCellFactory(listView -> new ListCell<Path>() {
private final ImageView imageView = new ImageView();
{
imageView.setFitHeight(80);
imageView.setFitWidth(160);
imageView.setPreserveRatio(true);
}
@Override
public void updateItem(Path path, boolean empty) {
super.updateItem(path, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setText(path.getFileName().toString());
imageView.setImage(new Image(path.toUri().toString(), true));
setGraphic(imageView);
}
}
});
ImageView imageView = new ImageView();
imageFilesList.getSelectionModel().selectedItemProperty().addListener((obs, oldFile, newFile) -> {
if (newFile == null) {
imageView.setImage(null);
} else {
imageView.setImage(new Image(newFile.toUri().toString(), true));
}
});
imageFilesList.setMinWidth(200);
StackPane imageHolder = new StackPane(imageView);
imageView.fitWidthProperty().bind(imageHolder.widthProperty());
imageView.fitHeightProperty().bind(imageHolder.heightProperty());
imageView.setPreserveRatio(true);
BorderPane root = new BorderPane(imageHolder, vBox, null, null, imageFilesList);
Scene scene = new Scene(root, 800, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public boolean del(File dir){
if (dir.isDirectory()){
File[] files = dir.listFiles();
for (File aktFile: files){
del(aktFile);
}
}
return dir.delete();
}
private List<Path> load(Path directory) {
List<Path> files = new ArrayList<>();
try {
Files.newDirectoryStream(directory, "*.{jpg,jpeg,png,JPG,JPEG,PNG}").forEach(file -> files.add(file));
} catch (IOException e) {
e.printStackTrace();
}
return files ;
}
public static void main(String[] args) {
launch(args);
}
}