Witam, zacząłem uczyć się JavaFx, ale stanąłem na pewnym problemie. Chcę napisać przeglądarkę plików, po której można się poruszać i edytować pliki (kopiować, wklejać, przerzucać między oknami etc). W jaki sposób się do tego zabrać? Na załączonym zdjęciu widać o co dokładnie mi chodzi.
Wpisz w google "javafx file explorer" lub "javafx file browser" to się dokładnie dowiesz bo tyle co mogę ci powiedzieć to pobierasz listę plików z katalogu "C:" i wyświetlasz wszystko za pomocą buttonów
Poczytaj sobie o FXML. GUI możesz zrobić drag 'n dropem w SceneBuilderze. Co do wyświetlania to ja bym zrobił SplitPane z TableView po obu stronach. Coś takiego:
jedrzej92 napisał(a):
W jaki sposób się do tego zabrać?
Po prostu się za to zabierz. Napisałeś przecież, że chcesz wyświetlać pliki oraz wykonywać na nich operacje z poziomu GUI programu. Tak wiec:
- stwórz GUI, które pozwoli Ci osadzić pożądaną funkcjonalność w interfejsie użytkownika;
- zaimplementuj tą funkcjonalność w kontrolerach powiązanych z GUI i klasach reprezentujących model danych;
Hmm... Nie wiem jak to inaczej ująć. Określiłeś przecież to co chcesz zrobić dość jasno. Teraz po prostu to zrób, a jak będziesz miał problemy z konkretnymi rzeczami, to daj znać.
Witam, powoli zabieram się za ten problem. Zacząłem od wyświetlenia plików w tabelce i dodaniu dwóch funkcji - otwarcie pliku oraz otwarcie i wyświetlenie folderu. Próbuję teraz napisać funkcję powrotu do folderu rodzinnego, niestety nie wiem jak za to się zabrać. Myślałem o tym, by do pierwszej pozycji w tabeli dodać ściężkę folderu parent i w taki sposób to rozwiązać, ale nie wiem w jaki sposób pobrać ściężkę tego folderu. Kod na dole:
package gui;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
private Stage window;
private TableView<File> table;
private TableColumn<File, String> pathColumn;
private Button btnBack;
@Override
public void start(Stage primaryStage) {
try {
window = primaryStage;
window.setTitle("FileExplorer");
File dir = new File(System.getProperty("user.home") + "/Desktop");
btnBack = new Button("back");
/**
TableColumn<File, String> nameColumn = new TableColumn<File, String>("Name");
nameColumn.setMinWidth(400);
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
**/
pathColumn = new TableColumn<File, String>("Path");
pathColumn.setMinWidth(400);
pathColumn.setCellValueFactory(new PropertyValueFactory<>("path"));
table = new TableView<File>();
table.getItems().addAll(dir.listFiles());
table.getColumns().addAll(pathColumn);
table.setOnMouseClicked(e-> {
if(e.getClickCount() == 2 ){
File path = table.getSelectionModel().selectedItemProperty().getValue();
if(path.isDirectory()==true){
openDirectory(path);
}else{
openFile(path);
}
}
});
VBox vbox = new VBox();
vbox.getChildren().addAll(btnBack,table);
Scene scene = new Scene(vbox);
window.setScene(scene);
window.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public void openFile(File filePath){
Desktop desktop = Desktop.getDesktop();
try {
desktop.open(filePath);
} catch (IOException e) {
e.printStackTrace();
}
}
public void openDirectory(File filePath){
table.getItems().clear();
table.getItems().addAll(filePath.listFiles());
}
public static void main(String[] args) {
launch(args);
}
}
Jeśli przez katalog rodzinny rozumiesz katalog nadrzędny to możesz go dostać za pomocą metody getParent() (zwraca String) lub getParentFile() (zwraca File) z klasy File. Jeśli obiekt file wskazuje na plik to np. getParent() zwróci ścieżkę do folderu, w którym ten plik się znajduje, a jeśli wskazuje na folder to zwróci ścieżkę do folderu nadrzędnego.