Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
5 / 5 / 1
Регистрация: 10.02.2014
Сообщений: 95

Создание файлового менеджера типа totalcmd

07.07.2015, 14:29. Показов 4725. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
новичок. учусь. пишу файловый менеджер. тут по ходу буду спрашивать, если застряну.

собственно первый вопрос.
считываю руты файловой системы и хочу в автоматическом порядке создать соответствующее количество кнопок с соответствующими названиями (типа C: D: E: ...). использую javafx.

я думал создавать ссылки на кнопки и как-то автоматом к названию ссылки дописывать цифру-номер. но как так сделать не знаю. да и в общем - какие есть способы динамически создать и настроить неопределённое количество кнопок?

подскажите чего-нить пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.07.2015, 14:29
Ответы с готовыми решениями:

Создание файлового менеджера для работы с тегами
Всем привет. У меня такое задание, создать файловый менеджер, который будет ассоциировать файлы с тегами. Также, чтобы теги можно было, как...

Исходник файлового менеджера
Есть ли у кого нибудь исходник файлового менеджера(проводника) на C# в visual studio 2012 -2017

Реализация файлового менеджера
Нужно сделать программу что-то вроде "Файлового менеджера"(Упрощённый, то есть отображение структуры файлов, функции такие как: копировать,...

17
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
07.07.2015, 14:50
rayden reed, думаю вы рано начали менеджер писать.
0
5 / 5 / 1
Регистрация: 10.02.2014
Сообщений: 95
07.07.2015, 16:11  [ТС]

Не по теме:

KEKCoGEN, почему?



Добавлено через 2 минуты
разобрался....
Java
1
2
3
4
5
6
7
8
9
10
for(File tmpFile : roots) {
            Button btn = new Button(tmpFile.toString());
            btn.setOnAction(new EventHandler<ActionEvent>() {
 
                public void handle(ActionEvent event) {
                    System.out.println("Hello World!");
                }
            });
            hbox.getChildren().add(btn);
}
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
07.07.2015, 16:17
думаешь кому-то нужен этот кусок кода, вырванный из контекста?
0
07.07.2015, 17:55  [ТС]

Не по теме:

Паблито, да, ты прав. но редактировать уже не смогу.
целиком выложу, когда все это чудо будет хотя бы директории с файлами выводить. или оно тоже никому не нужно?)

0
5 / 5 / 1
Регистрация: 10.02.2014
Сообщений: 95
11.07.2015, 10:36  [ТС]
ближайший план-вопрос на будущее:
1. как сделать чтобы выделенная строка (см. скрин) не заливалась синим, а окружалась курсором в виде синей рамки?
2. как работают эти всякие Factory в коде?
Java
1
2
3
TableColumn nameCol = new TableColumn("Name");
        nameCol.setCellValueFactory(new PropertyValueFactory<DirectoryItem, String>("name"));
        nameCol.setMinWidth(200);
3. почему там проперти?
4. обязательно ли тут должны быть дженерики?


5. как заменить стрелки в полях аргументов обратно на старый понятный синтаксис?
Java
1
2
3
4
table.setRowFactory(tv -> {
            TableRow<DirectoryItem> row = new TableRow<>();
            row.setOnMouseClicked(event -> {
                if (event.getClickCount() == 2 && (!row.isEmpty())) {......}
стрелки это лямбда выражения. они существенно уменьшают количество кода, но вместе с тем, лично мне сложнее понимать какого типа переменные передаются и куда конкретно они передаются.

в общем получилось замутить этакой мини проводник. только пока без операций с файлами.
код под спойлером. может кто покритикует. конструктивно.
зажарка тут FileManagerProject.jar.zip
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import java.io.File;
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.scene.control.Button;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.Scene;
import javafx.stage.Stage;
 
 
public class JavaFXApp extends Application {
 
    private TextField pathTextField = new TextField();
    private TableView<DirectoryItem> table = new TableView<DirectoryItem>();
    private final ObservableList<DirectoryItem> tableData = FXCollections.observableArrayList();
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage stage) {
 
        HBox hbox = new HBox();
        for(File root : File.listRoots()) {
            String rootPath = root.toString();
            Button btn = new Button(rootPath);
            btn.setOnAction(
                new EventHandler<ActionEvent>() {
 
                    public void handle(ActionEvent event) {
                        tableData.clear();
                        pathTextField.setText(rootPath);
                        initTableData();
                    }
                }
            );
            hbox.getChildren().add(btn);
        }
 
        pathTextField.setText(File.listRoots()[0].toString());
        initTableData();
        TableColumn nameCol = new TableColumn("Name");
        nameCol.setCellValueFactory(new PropertyValueFactory<DirectoryItem, String>("name"));
        nameCol.setMinWidth(200);
 
        TableColumn sizeCol = new TableColumn("Size");
        sizeCol.setCellValueFactory(new PropertyValueFactory<DirectoryItem, Long>("size"));
        sizeCol.setMinWidth(100);
 
        table.setItems(tableData);
        table.getColumns().addAll(nameCol, sizeCol);
 
        table.setRowFactory(tv -> {
            TableRow<DirectoryItem> row = new TableRow<>();
            row.setOnMouseClicked(event -> {
                if (event.getClickCount() == 2 && (!row.isEmpty())) {
                    DirectoryItem rowData = row.getItem();
                    if (rowData.getSize() == "folder") {
                        String tempStr = rowData.getName();
                        if (tempStr == "..") {
                            tempStr = pathTextField.getText();
                            int lastSlash = tempStr.lastIndexOf("\\");
                            pathTextField.setText(tempStr.substring(0, lastSlash));
                        } else 
                            pathTextField.setText(new StringBuilder(pathTextField.getText()).append("\\").append(tempStr).toString());
                        initTableData();
                    }
                }
            });
            return row ;
        });
 
        VBox vbox = new VBox(10, hbox, pathTextField, table);
        vbox.setPadding(new Insets(10, 20, 10, 20));
 
        Scene scene = new Scene(vbox);
        scene.getStylesheets().add(JavaFXApp.class.getResource("JavaFXApp.css").toExternalForm());
        stage.setTitle("FileManager (building in progress...)");
        stage.setScene(scene);
        stage.show();
    }
 
    private void initTableData() {
        String path = pathTextField.getText();
        File[] list = new File(path).listFiles();
        tableData.clear();
        if (path.length() > 3)
            tableData.add(new DirectoryItem("..", "folder"));
        if (list != null)
            for (File file : list) {
                String fileName = file.getName();
                if (file.isDirectory())
                    tableData.add(new DirectoryItem(fileName, "folder"));
                else
                    tableData.add(new DirectoryItem(fileName, String.valueOf(file.length())));
            }
    }
}
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import javafx.beans.property.SimpleStringProperty;
 
public class DirectoryItem {
 
    private SimpleStringProperty name;
    private SimpleStringProperty size;
 
    DirectoryItem() {}
 
    DirectoryItem(String argName, String argSize) {
        this.name = new SimpleStringProperty(argName);
        this.size = new SimpleStringProperty(argSize);
    }
 
    public String getName() {
        return name.get();
    }
    public String getSize() {
        return size.get();
    }
    public void setName(String argName) {
        name.set(argName);
    }
    public void setSize(String argSize) {
        size.set(argSize);
    }
}
1
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
11.07.2015, 13:52
Цитата Сообщение от rayden reed Посмотреть сообщение
в общем получилось замутить этакой мини проводник.
это ваш код? Если да непонятно откуда вопросы про лямбды и генерики...
0
5 / 5 / 1
Регистрация: 10.02.2014
Сообщений: 95
11.07.2015, 18:14  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
это ваш код? Если да непонятно откуда вопросы про лямбды и генерики...
что значит ваш? мой?

Добавлено через 3 минуты
на мой взгляд - вопрос не корректен.
все кто пишут на джава - пользуются чужими методами. тогда в конце чей код?
а если я взял большие куски чужого кода и слепил что-то, тогда это что-то чье?
какая разница?

программа делает все что я от нее ждал. я доволен. первый раз подобную программу пишу. все по кусочку. по примерам. прочитал, скопировал, попробовал, на сколько смог - разобрался, переделал, дописал. правда толком не во всем разобрался.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
11.07.2015, 20:04
Цитата Сообщение от rayden reed Посмотреть сообщение
на мой взгляд - вопрос не корректен.
вопрос как раз имеет место быть. Именно потому у вас вопросы по дженерикам и прочему, что вы просто навставляли кусков чужого кода, которые работают, но вы не понимаете как. Такое программирование бесполезно, так как при необходимости что-то добавить или исправить вы не будете знать куда именно нужно вносить изменения и какие. да и повторно применить этот код в другом месте вы сами не сможете, вы не знаете как он работает, останется тупо копировать его снова.
1
5 / 5 / 1
Регистрация: 10.02.2014
Сообщений: 95
11.07.2015, 22:03  [ТС]
Welemir1,
хорошо, но я не понял, что считать чужим кодом, а что своим. вы можете объяснить?

я придумал себе интересную задачу и по ходу программирование узнал много чего нового. польза уже есть - факт. при этом с интересом во всем разбирался. да, я не все понял. ну так я еще не закончил. я далеко не всегда знаю как и где искать инфу. за этим я здесь и пишу вопросы.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
11.07.2015, 22:59
Цитата Сообщение от rayden reed Посмотреть сообщение
я придумал себе интересную задачу и по ходу программирование узнал много чего нового.
никто не говорит что этот способ обучения работать небудет. Просто он не самый оптимальный т.к вы выбрали слишком сложную задачу для своего уровня знаний. Поэтому вам приходится копировать много кода который вы непонимаете. Вы можете более эффективно подойти к обучению если будите для начала решать задачи попроще.
0
5 / 5 / 1
Регистрация: 10.02.2014
Сообщений: 95
12.07.2015, 10:08  [ТС]
так интереснее...
я хочу сделать в конце концов что-то , самостоятельное, рабочее, интересное (пусть даже для меня одного).
а главное - у меня есть конкретная конечная цель. я не распыляюсь на изучение того, что мне не пригодится в проекте - это можно делать вечно.
ну и потом, когда у меня будет побольше таких проектов, на собеседовании я смогу рассказать, показать больше чем если бы просто читал теорию и решал задачки из книжки...

может это не совсем верная аналогия, но
чтобы ездить на авто - не обязательно знать работу двигателя. но чтобы ездить быстрее - знание понадобится. но тогда и мотивация будет для изучения этого двигателя, а с ней и эффективность разбора деталей шире и скорость запоминания выше.


а что значит - знать/понимать код?
(вопрос не риторический, как и все остальные)

если создам допустим new Button(), то у меня на панельке появится копка. а чтобы она работала, мне нужно создать eventhandler и переопределить метод. означает ли это что я знаю этот код или я еще должен знать иерархию классов и интерфейсов и все их методы и их работу и прочее, вплоть до баттона включительно?


что вы понимаете под "задачами попроще"? и в чем проявляется большая эффективность обучения?
какие например задачи, по вашему мнению, мне стоит решать?
вы говорите, что "файл менеджер" - задача сложная. но если разбить ее на мелкие (что я и делаю), то не такая она и сложная. просто большая (для меня).
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
12.07.2015, 11:40
Цитата Сообщение от rayden reed Посмотреть сообщение
я не распыляюсь на изучение того, что мне не пригодится в проекте
первая ошибка. Вы не можете заранее знать что вам не пригодится в проекте, пусть не сегодня, так завтра.
Цитата Сообщение от rayden reed Посмотреть сообщение
ну и потом, когда у меня будет побольше таких проектов, на собеседовании я смогу рассказать
это конечно плюс, но вот они тебя спросят а что лучше ЛинкедЛист или АррайЛист? (к примеру) а ты скажешь -"знаете я не распылялся и делал только вот это, коллекциями не занимался"? На этом собесед окончится.
Цитата Сообщение от rayden reed Посмотреть сообщение
что вы понимаете под "задачами попроще"?
да тут есть целый раздел на форуме с задачами для начинающих, можете их не решать а просто посмотреть -смогли бы вы их перещелкать как орешки? Если нет, то вперед -прорешивать.
1
Mobile Software Engineer
Эксперт С++
 Аватар для Ev[G]eN
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
12.07.2015, 12:19
Цитата Сообщение от rayden reed Посмотреть сообщение
я хочу сделать в конце концов что-то , самостоятельное
Цитата Сообщение от rayden reed Посмотреть сообщение
искать инфу. за этим я здесь и пишу вопросы
что-то здесь не так, мне кажется
0
5 / 5 / 1
Регистрация: 10.02.2014
Сообщений: 95
12.07.2015, 19:24  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
первая ошибка. Вы не можете заранее знать что вам не пригодится в проекте, пусть не сегодня, так завтра.
я сейчас мыслю относительно своей маленькой программки, а вы, похоже, с точки зрения дева профессионала, работающего над чем-то огромным.

на счет простых задач - спасибо, поищу.

Цитата Сообщение от Ev[G]eN Посмотреть сообщение
что-то здесь не так, мне кажется
под самостоятельным я имел в виду приложение со своим интерфейсом. но мысль немного непродуманная.


из всех вопросов конкретно по коду мне никто так и не ответил. но зато указали, что я много не знаю и надо еще много учить.
я задаю глупые/неправильные вопросы?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
12.07.2015, 19:31
Цитата Сообщение от rayden reed Посмотреть сообщение
я задаю глупые/неправильные вопросы?
нет, просто странные. Нужны ли тут дженерики? Ну попробуй без них, а лучше пойми почему использовали именно их. А это ты вряд ли поймешь не изучив литературу по дженерикам, потому снова возвращаемся к чтению классиков и простым проектам.
0
5 / 5 / 1
Регистрация: 10.02.2014
Сообщений: 95
12.07.2015, 20:50  [ТС]
Welemir1, ну дааа... по дженерикам уже прошелся. за вопрос прям стыдно стало)
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
12.07.2015, 20:56
Цитата Сообщение от rayden reed Посмотреть сообщение
за вопрос прям стыдно стало)
наоборот, стыдно тем, кто не спросил и нагородил. А спрашивать -не стыдно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2015, 20:56
Помогаю со студенческими работами здесь

Каково устройство файлового менеджера?
Доброго времени суток. хочу сделать простенький файловый менеджер, что бы он мог выполнять простейшие функции, например: удаление,...

Смена файлового менеджера по умолчанию
Как сменить файловый менеджер по умолчанию на Linux mint 17 MATE? Надо чтобы все папки, включая computer:///, trash:///, домашнюю и т.д.,...

Написание консольного файлового менеджера
Добрый день, в университете задали проект по созданию консольного Файлового менеджера на C++ в котором можно: 1)Перемещать между...

Совте о создании файлового менеджера
Мне нужно написать файловый менеджер с удобным интерфейсом.Какие библиотеки и функции мне нужно использовать в своей программе.Направьте...

Создать класс с методами файлового менеджера
Здравствуйте. Нужна помощь. А именно создать класс файлового менеджера Причина в том что например все методы выводят на прогресс бар...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru