JavaFx jak wyświetlić pliki.

0

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.

0

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

0

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:
Zrzut ekranu 2016-07-25 10.46.19.png

0
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ć.

0

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

}
0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0