Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.67 KB | None | 0 0
  1. public void PathLineHandler(Stage stage){
  2. final TreeItem<File> treeitem = treeview.getSelectionModel().getSelectedItem();
  3. if(treeitem.isExpanded()){
  4. treeitem.setExpanded(false);
  5. }else {
  6. EventHandler<ActionEvent> startEvent = new EventHandler<ActionEvent>() {
  7.  
  8. public void handle(ActionEvent event) {
  9. treeitem.setGraphic(new ImageView(waiting));
  10.  
  11. }
  12. };
  13. EventHandler<ActionEvent> endEvent = new EventHandler<ActionEvent>() {
  14. public void handle(ActionEvent event) {
  15. treeitem.setExpanded(true);
  16. String path = treeitem.getValue().getAbsolutePath();
  17. root.setText(path);
  18.  
  19. }
  20. };
  21.  
  22. Timeline timeline = new Timeline();
  23.  
  24. KeyFrame key1 = new KeyFrame(Duration.ZERO);
  25. KeyFrame key2 = new KeyFrame(Duration.seconds(2), "end", startEvent);
  26. timeline.getKeyFrames().addAll(key1,key2);
  27. timeline.setOnFinished(endEvent);
  28. timeline.playFromStart();
  29. }
  30. }
  31.  
  32. package Application;
  33.  
  34. import java.io.File;
  35.  
  36. import javafx.animation.KeyFrame;
  37. import javafx.animation.KeyValue;
  38. import javafx.animation.PauseTransition;
  39. import javafx.animation.Timeline;
  40. import javafx.application.Application;
  41. import javafx.beans.value.ChangeListener;
  42. import javafx.beans.value.ObservableValue;
  43. import javafx.collections.ObservableList;
  44. import javafx.event.ActionEvent;
  45. import javafx.event.EventHandler;
  46. import javafx.geometry.Insets;
  47. import javafx.scene.Node;
  48. import javafx.scene.Scene;
  49. import javafx.scene.control.Button;
  50. import javafx.scene.control.Label;
  51. import javafx.scene.control.TextField;
  52. import javafx.scene.control.TreeCell;
  53. import javafx.scene.control.TreeItem;
  54. import javafx.scene.control.TreeView;
  55. import javafx.scene.effect.InnerShadow;
  56. import javafx.scene.image.Image;
  57. import javafx.scene.image.ImageView;
  58. import javafx.scene.input.KeyEvent;
  59. import javafx.scene.input.MouseEvent;
  60. import javafx.scene.layout.BorderPane;
  61. import javafx.scene.layout.HBox;
  62. import javafx.scene.paint.Color;
  63. import javafx.stage.Modality;
  64. import javafx.stage.Stage;
  65. import javafx.util.Callback;
  66. import javafx.util.Duration;
  67.  
  68. //Основное окно
  69. public class FileManager extends Application {
  70.  
  71. FileSeeker fseek = new FileSeeker(new File("C:\"));
  72. TreeView<File> treeview = new TreeView<File>(fseek);
  73. final Label warn = new Label("Выберите Каталог");
  74. Label root = new Label("C:\");
  75.  
  76. final Image waiting = new Image(getClass().getResourceAsStream("ImagesAndCss/hourglass.png"));
  77. String iconAdd = FileManager.class.getResource("ImagesAndCss/kde_add_folder_to_archive.png").toExternalForm();
  78.  
  79. @Override
  80. public void start(final Stage primaryStage) throws Exception {
  81.  
  82. EventHandler<ActionEvent> addDir = new EventHandler<ActionEvent>() {
  83. public void handle(ActionEvent event) {
  84. CodeHandler(primaryStage);
  85. }
  86. };
  87. EventHandler<KeyEvent> addDirf7 = new EventHandler<KeyEvent>() {
  88. public void handle(KeyEvent event) {
  89. CodeHandler(primaryStage);
  90. }
  91. };
  92. EventHandler<MouseEvent> pathLine = new EventHandler<MouseEvent>() {
  93. public void handle(MouseEvent event) {
  94. PathLineHandler(primaryStage);
  95. }
  96. };
  97.  
  98. String css = FileManager.class.getResource("ImagesAndCss/Main.css").toExternalForm();
  99. String icon = FileManager.class.getResource("ImagesAndCss/foldopen16.png").toExternalForm();
  100.  
  101. Button addDirectory = new Button("Создать каталог (F7)");
  102. addDirectory.setGraphic(new ImageView(iconAdd));
  103. addDirectory.setId("AddDir");
  104. final BorderPane spane = new BorderPane();
  105. spane.setStyle("-fx-text-fill: white;-fx-background-color: #24011F;");
  106.  
  107. HBox But = new HBox();
  108. But.setPadding(new Insets(5));
  109.  
  110. Scene scene = new Scene(spane, 600, 600);
  111.  
  112. scene.getStylesheets().add(css);
  113.  
  114. root.setStyle("-fx-text-fill: white;");
  115. warn.setStyle("-fx-text-fill: yellow;");
  116.  
  117. reduceNames(treeview);
  118. addDirectory.setOnAction(addDir);
  119.  
  120. fseek.setExpanded(true);
  121.  
  122. But.getChildren().addAll(addDirectory,warn);
  123.  
  124. spane.setTop(root);
  125. spane.setCenter(treeview);
  126. spane.setBottom(But);
  127.  
  128. madeShadow(treeview,50);
  129. madeShadow(But,2);
  130.  
  131. scene.setOnKeyPressed(addDirf7);
  132. treeview.setOnMouseClicked(pathLine);
  133.  
  134. primaryStage.setTitle("Файловый менеджер");
  135. primaryStage.setScene(scene);
  136. primaryStage.getIcons().add(new Image(icon));
  137. primaryStage.show();
  138.  
  139. }
  140.  
  141. //Код для обработчиков
  142. //Добавление каталога
  143. public void CodeHandler(Stage stage){
  144. try{
  145. File f = treeview.getSelectionModel().getSelectedItem().getValue();
  146. if(f == null || !f.isDirectory()){
  147. warn.setText("Ошибка.Вы выбрали файл, а не Директорию");
  148. } else {
  149. warn.setText("Выберите каталог");
  150. final Stage addDirStage = new AddDirectory(stage,f.getAbsolutePath());
  151. addDirStage.show();
  152. }
  153. }catch(NullPointerException e) {
  154. warn.setText("Директория не выбрана!");
  155. }
  156. }
  157.  
  158. //Заморозка и обновление линии
  159. public void PathLineHandler(Stage stage){
  160. final TreeItem<File> treeitem = treeview.getSelectionModel().getSelectedItem();
  161. if(treeitem.isExpanded()){
  162. treeitem.setExpanded(false);
  163. }else {
  164. EventHandler<ActionEvent> startEvent = new EventHandler<ActionEvent>() {
  165.  
  166. public void handle(ActionEvent event) {
  167. treeitem.setGraphic(new ImageView(waiting));
  168.  
  169. }
  170. };
  171. EventHandler<ActionEvent> endEvent = new EventHandler<ActionEvent>() {
  172. public void handle(ActionEvent event) {
  173. treeitem.setExpanded(true);
  174. String path = treeitem.getValue().getAbsolutePath();
  175. root.setText(path);
  176.  
  177. }
  178. };
  179.  
  180. Timeline timeline = new Timeline();
  181.  
  182. KeyFrame key1 = new KeyFrame(Duration.ZERO);
  183. KeyFrame key2 = new KeyFrame(Duration.seconds(2), "end", startEvent);
  184. timeline.getKeyFrames().addAll(key1,key2);
  185. timeline.setOnFinished(endEvent);
  186. timeline.playFromStart();
  187. }
  188. }
  189.  
  190. //Обрезает имена файлов и каталогов,добавляет иконки
  191. public void reduceNames(TreeView<File> treeview) {
  192. treeview.setCellFactory(new Callback<TreeView<File>, TreeCell<File>>() {
  193. public TreeCell<File> call(TreeView<File> tv) {
  194. return new TreeCell<File>() {
  195. @Override
  196. protected void updateItem(File item, boolean empty) {
  197. super.updateItem(item, empty);
  198. setText((empty || item == null) ? "" : item.getName());
  199. setGraphic((empty || item == null) ? null : this.getTreeItem().getGraphic());
  200. }
  201.  
  202. };
  203. }
  204. });
  205. }
  206.  
  207. //Дополнительное окно с добавлением каталога
  208. public class AddDirectory extends Stage {
  209.  
  210. public AddDirectory(Stage parent,final String path) {
  211. initOwner(parent);
  212. initModality(Modality.WINDOW_MODAL);
  213.  
  214. BorderPane bpane = new BorderPane();
  215. bpane.setStyle("-fx-text-fill: white; -fx-background-color: #24011F; ");
  216.  
  217. HBox buts = new HBox(5);
  218. HBox addField = new HBox();
  219.  
  220. addField.setPadding(new Insets(5));
  221. buts.setPadding(new Insets(5));
  222.  
  223. Button add = new Button("Создать");
  224. Button cancel = new Button("Отмена");
  225.  
  226. Label pathl = new Label("Имя Каталога: ");
  227.  
  228. add.setStyle("-fx-color: green;");
  229. cancel.setStyle("-fx-color: red;");
  230. pathl.setStyle("-fx-text-fill: white");
  231.  
  232. final TextField enterpath = new TextField("Новый Каталог");
  233.  
  234. enterpath.setMinWidth(400);
  235. enterpath.setMaxWidth(600);
  236.  
  237. buts.getChildren().addAll(add,cancel);
  238. addField.getChildren().addAll(pathl,enterpath);
  239. bpane.setBottom(buts);
  240. bpane.setCenter(addField);
  241.  
  242. add.setOnAction(new EventHandler<ActionEvent>() {
  243. public void handle(ActionEvent event) {
  244. File f = new File(path + "\" + enterpath.getText());
  245. if(!f.exists()){
  246. f.mkdir();
  247. close();
  248. }
  249.  
  250. }
  251. });
  252.  
  253.  
  254. cancel.setOnAction(new EventHandler<ActionEvent>() {
  255. public void handle(ActionEvent event) {
  256. close();
  257. }
  258. });
  259.  
  260.  
  261.  
  262. Scene scene = new Scene(bpane, 500, 100);
  263. scene.getOnKeyPressed();
  264.  
  265. setResizable(false);
  266. setScene(scene);
  267. getIcons().add(new Image(iconAdd));
  268. setTitle("Добавить каталог");
  269.  
  270.  
  271. }
  272. }
  273.  
  274. //Эффект внутренней тени
  275. public void madeShadow(Node node, double res){
  276. InnerShadow insh = new InnerShadow(res, Color.BLACK);
  277. node.setEffect(insh);
  278. }
  279.  
  280. //Старт
  281. public static void main(String [] args){
  282. launch(args);
  283. }
  284. }
  285.  
  286. package Application;
  287.  
  288. import java.io.File;
  289.  
  290. import javafx.animation.KeyFrame;
  291. import javafx.animation.KeyValue;
  292. import javafx.animation.PauseTransition;
  293. import javafx.animation.Timeline;
  294. import javafx.beans.value.ChangeListener;
  295. import javafx.beans.value.ObservableValue;
  296. import javafx.collections.FXCollections;
  297. import javafx.collections.ObservableList;
  298. import javafx.event.ActionEvent;
  299. import javafx.event.EventHandler;
  300. import javafx.scene.Node;
  301. import javafx.scene.control.TreeItem;
  302. import javafx.scene.image.Image;
  303. import javafx.scene.image.ImageView;
  304. import javafx.util.Duration;
  305.  
  306. public class FileSeeker extends TreeItem<File> {
  307.  
  308. Image icon = new Image(FileSeeker.class.getResourceAsStream("ImagesAndCss/ico.png"));
  309. Image open = new Image(FileSeeker.class.getResourceAsStream("ImagesAndCss/foldopen16.png"));
  310. Image close = new Image(FileSeeker.class.getResourceAsStream("ImagesAndCss/foldclose16.png"));
  311. Image waiting = new Image(FileSeeker.class.getResourceAsStream("ImagesAndCss/hourglass.png"));
  312.  
  313. public FileSeeker(File file) {
  314. super(file);
  315. }
  316.  
  317. @Override
  318. public ObservableList<TreeItem<File>> getChildren() {
  319. if (isFirstChildren) {
  320. isFirstChildren = false;
  321. super.getChildren().setAll(buildFoldersAndFiles(this));
  322. }
  323. return super.getChildren();
  324. }
  325.  
  326. @Override
  327. public boolean isLeaf() {
  328. if (isFirstLeaf) {
  329. isFirstLeaf = false;
  330. File f = (File) getValue();
  331. isLeaf = f.isFile();
  332. }
  333.  
  334. return isLeaf;
  335. }
  336.  
  337. private ObservableList<TreeItem<File>> buildFoldersAndFiles(TreeItem<File> treeItem) {
  338. File f = treeItem.getValue();
  339. f.getName();
  340. if (f != null) {
  341. File[] files = f.listFiles();
  342. ObservableList<TreeItem<File>> children = FXCollections
  343. .observableArrayList();
  344.  
  345. for (File childFile : files) {
  346. if(childFile.isDirectory()){
  347. final FileSeeker fs = new FileSeeker(childFile);
  348. Setter(fs);
  349. fs.expandedProperty().addListener(new ChangeListener<Boolean>() {
  350. public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue,
  351. Boolean newValue) {
  352.  
  353. Setter(fs);
  354. }
  355. });
  356. children.add(fs);
  357. } else {
  358. FileSeeker fs = new FileSeeker(childFile);
  359. fs.setGraphic(new ImageView(icon));
  360. children.add(fs);
  361. }
  362. }
  363. return children;
  364. }
  365.  
  366. return FXCollections.emptyObservableList();
  367. }
  368.  
  369. public void Setter(FileSeeker fs){
  370. if (fs.isExpanded()){
  371. fs.setGraphic(new ImageView(open));
  372. } else {
  373. fs.setGraphic(new ImageView(close));
  374. }
  375. }
  376.  
  377. private boolean isFirstChildren = true;
  378. private boolean isFirstLeaf = true;
  379. private boolean isLeaf;
  380. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement