Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void PathLineHandler(Stage stage){
- final TreeItem<File> treeitem = treeview.getSelectionModel().getSelectedItem();
- if(treeitem.isExpanded()){
- treeitem.setExpanded(false);
- }else {
- EventHandler<ActionEvent> startEvent = new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- treeitem.setGraphic(new ImageView(waiting));
- }
- };
- EventHandler<ActionEvent> endEvent = new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- treeitem.setExpanded(true);
- String path = treeitem.getValue().getAbsolutePath();
- root.setText(path);
- }
- };
- Timeline timeline = new Timeline();
- KeyFrame key1 = new KeyFrame(Duration.ZERO);
- KeyFrame key2 = new KeyFrame(Duration.seconds(2), "end", startEvent);
- timeline.getKeyFrames().addAll(key1,key2);
- timeline.setOnFinished(endEvent);
- timeline.playFromStart();
- }
- }
- package Application;
- import java.io.File;
- import javafx.animation.KeyFrame;
- import javafx.animation.KeyValue;
- import javafx.animation.PauseTransition;
- import javafx.animation.Timeline;
- import javafx.application.Application;
- import javafx.beans.value.ChangeListener;
- import javafx.beans.value.ObservableValue;
- import javafx.collections.ObservableList;
- import javafx.event.ActionEvent;
- import javafx.event.EventHandler;
- import javafx.geometry.Insets;
- import javafx.scene.Node;
- import javafx.scene.Scene;
- import javafx.scene.control.Button;
- import javafx.scene.control.Label;
- import javafx.scene.control.TextField;
- import javafx.scene.control.TreeCell;
- import javafx.scene.control.TreeItem;
- import javafx.scene.control.TreeView;
- import javafx.scene.effect.InnerShadow;
- import javafx.scene.image.Image;
- import javafx.scene.image.ImageView;
- import javafx.scene.input.KeyEvent;
- import javafx.scene.input.MouseEvent;
- import javafx.scene.layout.BorderPane;
- import javafx.scene.layout.HBox;
- import javafx.scene.paint.Color;
- import javafx.stage.Modality;
- import javafx.stage.Stage;
- import javafx.util.Callback;
- import javafx.util.Duration;
- //Основное окно
- public class FileManager extends Application {
- FileSeeker fseek = new FileSeeker(new File("C:\"));
- TreeView<File> treeview = new TreeView<File>(fseek);
- final Label warn = new Label("Выберите Каталог");
- Label root = new Label("C:\");
- final Image waiting = new Image(getClass().getResourceAsStream("ImagesAndCss/hourglass.png"));
- String iconAdd = FileManager.class.getResource("ImagesAndCss/kde_add_folder_to_archive.png").toExternalForm();
- @Override
- public void start(final Stage primaryStage) throws Exception {
- EventHandler<ActionEvent> addDir = new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- CodeHandler(primaryStage);
- }
- };
- EventHandler<KeyEvent> addDirf7 = new EventHandler<KeyEvent>() {
- public void handle(KeyEvent event) {
- CodeHandler(primaryStage);
- }
- };
- EventHandler<MouseEvent> pathLine = new EventHandler<MouseEvent>() {
- public void handle(MouseEvent event) {
- PathLineHandler(primaryStage);
- }
- };
- String css = FileManager.class.getResource("ImagesAndCss/Main.css").toExternalForm();
- String icon = FileManager.class.getResource("ImagesAndCss/foldopen16.png").toExternalForm();
- Button addDirectory = new Button("Создать каталог (F7)");
- addDirectory.setGraphic(new ImageView(iconAdd));
- addDirectory.setId("AddDir");
- final BorderPane spane = new BorderPane();
- spane.setStyle("-fx-text-fill: white;-fx-background-color: #24011F;");
- HBox But = new HBox();
- But.setPadding(new Insets(5));
- Scene scene = new Scene(spane, 600, 600);
- scene.getStylesheets().add(css);
- root.setStyle("-fx-text-fill: white;");
- warn.setStyle("-fx-text-fill: yellow;");
- reduceNames(treeview);
- addDirectory.setOnAction(addDir);
- fseek.setExpanded(true);
- But.getChildren().addAll(addDirectory,warn);
- spane.setTop(root);
- spane.setCenter(treeview);
- spane.setBottom(But);
- madeShadow(treeview,50);
- madeShadow(But,2);
- scene.setOnKeyPressed(addDirf7);
- treeview.setOnMouseClicked(pathLine);
- primaryStage.setTitle("Файловый менеджер");
- primaryStage.setScene(scene);
- primaryStage.getIcons().add(new Image(icon));
- primaryStage.show();
- }
- //Код для обработчиков
- //Добавление каталога
- public void CodeHandler(Stage stage){
- try{
- File f = treeview.getSelectionModel().getSelectedItem().getValue();
- if(f == null || !f.isDirectory()){
- warn.setText("Ошибка.Вы выбрали файл, а не Директорию");
- } else {
- warn.setText("Выберите каталог");
- final Stage addDirStage = new AddDirectory(stage,f.getAbsolutePath());
- addDirStage.show();
- }
- }catch(NullPointerException e) {
- warn.setText("Директория не выбрана!");
- }
- }
- //Заморозка и обновление линии
- public void PathLineHandler(Stage stage){
- final TreeItem<File> treeitem = treeview.getSelectionModel().getSelectedItem();
- if(treeitem.isExpanded()){
- treeitem.setExpanded(false);
- }else {
- EventHandler<ActionEvent> startEvent = new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- treeitem.setGraphic(new ImageView(waiting));
- }
- };
- EventHandler<ActionEvent> endEvent = new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- treeitem.setExpanded(true);
- String path = treeitem.getValue().getAbsolutePath();
- root.setText(path);
- }
- };
- Timeline timeline = new Timeline();
- KeyFrame key1 = new KeyFrame(Duration.ZERO);
- KeyFrame key2 = new KeyFrame(Duration.seconds(2), "end", startEvent);
- timeline.getKeyFrames().addAll(key1,key2);
- timeline.setOnFinished(endEvent);
- timeline.playFromStart();
- }
- }
- //Обрезает имена файлов и каталогов,добавляет иконки
- public void reduceNames(TreeView<File> treeview) {
- treeview.setCellFactory(new Callback<TreeView<File>, TreeCell<File>>() {
- public TreeCell<File> call(TreeView<File> tv) {
- return new TreeCell<File>() {
- @Override
- protected void updateItem(File item, boolean empty) {
- super.updateItem(item, empty);
- setText((empty || item == null) ? "" : item.getName());
- setGraphic((empty || item == null) ? null : this.getTreeItem().getGraphic());
- }
- };
- }
- });
- }
- //Дополнительное окно с добавлением каталога
- public class AddDirectory extends Stage {
- public AddDirectory(Stage parent,final String path) {
- initOwner(parent);
- initModality(Modality.WINDOW_MODAL);
- BorderPane bpane = new BorderPane();
- bpane.setStyle("-fx-text-fill: white; -fx-background-color: #24011F; ");
- HBox buts = new HBox(5);
- HBox addField = new HBox();
- addField.setPadding(new Insets(5));
- buts.setPadding(new Insets(5));
- Button add = new Button("Создать");
- Button cancel = new Button("Отмена");
- Label pathl = new Label("Имя Каталога: ");
- add.setStyle("-fx-color: green;");
- cancel.setStyle("-fx-color: red;");
- pathl.setStyle("-fx-text-fill: white");
- final TextField enterpath = new TextField("Новый Каталог");
- enterpath.setMinWidth(400);
- enterpath.setMaxWidth(600);
- buts.getChildren().addAll(add,cancel);
- addField.getChildren().addAll(pathl,enterpath);
- bpane.setBottom(buts);
- bpane.setCenter(addField);
- add.setOnAction(new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- File f = new File(path + "\" + enterpath.getText());
- if(!f.exists()){
- f.mkdir();
- close();
- }
- }
- });
- cancel.setOnAction(new EventHandler<ActionEvent>() {
- public void handle(ActionEvent event) {
- close();
- }
- });
- Scene scene = new Scene(bpane, 500, 100);
- scene.getOnKeyPressed();
- setResizable(false);
- setScene(scene);
- getIcons().add(new Image(iconAdd));
- setTitle("Добавить каталог");
- }
- }
- //Эффект внутренней тени
- public void madeShadow(Node node, double res){
- InnerShadow insh = new InnerShadow(res, Color.BLACK);
- node.setEffect(insh);
- }
- //Старт
- public static void main(String [] args){
- launch(args);
- }
- }
- package Application;
- import java.io.File;
- import javafx.animation.KeyFrame;
- import javafx.animation.KeyValue;
- import javafx.animation.PauseTransition;
- import javafx.animation.Timeline;
- import javafx.beans.value.ChangeListener;
- import javafx.beans.value.ObservableValue;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import javafx.event.ActionEvent;
- import javafx.event.EventHandler;
- import javafx.scene.Node;
- import javafx.scene.control.TreeItem;
- import javafx.scene.image.Image;
- import javafx.scene.image.ImageView;
- import javafx.util.Duration;
- public class FileSeeker extends TreeItem<File> {
- Image icon = new Image(FileSeeker.class.getResourceAsStream("ImagesAndCss/ico.png"));
- Image open = new Image(FileSeeker.class.getResourceAsStream("ImagesAndCss/foldopen16.png"));
- Image close = new Image(FileSeeker.class.getResourceAsStream("ImagesAndCss/foldclose16.png"));
- Image waiting = new Image(FileSeeker.class.getResourceAsStream("ImagesAndCss/hourglass.png"));
- public FileSeeker(File file) {
- super(file);
- }
- @Override
- public ObservableList<TreeItem<File>> getChildren() {
- if (isFirstChildren) {
- isFirstChildren = false;
- super.getChildren().setAll(buildFoldersAndFiles(this));
- }
- return super.getChildren();
- }
- @Override
- public boolean isLeaf() {
- if (isFirstLeaf) {
- isFirstLeaf = false;
- File f = (File) getValue();
- isLeaf = f.isFile();
- }
- return isLeaf;
- }
- private ObservableList<TreeItem<File>> buildFoldersAndFiles(TreeItem<File> treeItem) {
- File f = treeItem.getValue();
- f.getName();
- if (f != null) {
- File[] files = f.listFiles();
- ObservableList<TreeItem<File>> children = FXCollections
- .observableArrayList();
- for (File childFile : files) {
- if(childFile.isDirectory()){
- final FileSeeker fs = new FileSeeker(childFile);
- Setter(fs);
- fs.expandedProperty().addListener(new ChangeListener<Boolean>() {
- public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue,
- Boolean newValue) {
- Setter(fs);
- }
- });
- children.add(fs);
- } else {
- FileSeeker fs = new FileSeeker(childFile);
- fs.setGraphic(new ImageView(icon));
- children.add(fs);
- }
- }
- return children;
- }
- return FXCollections.emptyObservableList();
- }
- public void Setter(FileSeeker fs){
- if (fs.isExpanded()){
- fs.setGraphic(new ImageView(open));
- } else {
- fs.setGraphic(new ImageView(close));
- }
- }
- private boolean isFirstChildren = true;
- private boolean isFirstLeaf = true;
- private boolean isLeaf;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement