Во-первых, я знаю, что мой вопрос может занять некоторое время, потому что JavaFX имеет свой собственный FileChooser (который в значительной степени превосходит / предпочтительнее JFileChooser Swing) и что смешивание FX и Swing следует отговорить.Однако - я объясню функциональность, которую я пытаюсь создать, и я очень открыт для предложений о том, как еще туда добраться - если действительно я иду в неправильном направлении.
Итак, во-первых, основное приложениевстроен в JavaFX и предназначен для расчета и архивирования параметров биологических образцов.Основной наблюдаемой является tabPane, в которой новый экземпляр вкладки генерируется для каждого нового образца.Помимо расчета и архивирования параметров для каждого образца, пользователь также может сохранять файлы данных любого типа в отношении каждого образца в проекте.Это только для архивации - я не планирую углубленно взаимодействовать с этими файлами.Теперь я из истории UNIX и очень хотел бы иметь разумную структуру данных для моей «Папки проекта», которая может быть доступной, внешне редактируемой и удобочитаемой для человека.В связи с этим моя общая идея заключалась в том, чтобы сделать сохраненный вывод следующим образом:
- Корневая папка (т.е. не формат файла на заказ - просто классическая папка)
В корневой папке:
1 .Основной файл XML, детализирующий специфику проекта
2 .Второй уровень папок - по одной на каждую вкладку проекта
Внутри папок с примерами:
1 .XML-файл, подробно описывающий особенности образца
2 .Все импортированные файлы / данные, относящиеся к этому образцу
Теперь - при всем при этом у меня есть функция открытия / сохранения, к которой я стремлюсь работать с Swing JFileChooser.С помощью настраиваемого класса FileView, лежащего в основе JFileChooser, я могу определить определенный тип папки (как по отношению к псевдо-расширению, так и по внутренним файлам и их содержимому) как не подлежащий обработке, назначить ему определенный значок и затем открыть его с помощью средства выбора файлов,в действительности, как если бы это был настоящий файл.
Однако, с помощью JavaFX Chooser, это становится сложным.Поскольку метод ShowSaveDialog не существует для DirectoryChooser, из-за необходимости использовать FileChooser.ShowSaveDialog () вы можете легко некорректно сохранить папку в уже существующем проекте (вместо того, чтобы переписать его) - поскольку, по крайней мере в OSX, это плохо подсвечиваетсяв системном файловом менеджере.Еще одна проблема заключается в том, что при выборе папки - она не заполняет поле ввода с именем-фамилии, проводник просто спускается в этот каталог.
Аналогично - при открытии папки FileChooser.ShowOpenDialog () явно не подходит.Использование DirectoryChooser.ShowDialog () здесь гораздо более приемлемо, однако различие между обычными папками и папками, связанными с проектом (то есть установление их необратимых и определение значка) еще лучше обрабатывается в JFileChooser Swing.
ПоэтомуКто-нибудь может порекомендовать, как я могу открыть JFileChooser из моего приложения FX?Я пытался запустить JFileChooser из SwingNode, но не думаю, что реализовал его правильно.
Dialog SaveDialog = new Dialog();
SaveDialog.setTitle("Save Project");
SaveDialog.setResizable(true);
SwingNode swingnode = new SwingNode();
JFileChooser SaveChooser = new JFileChooser();
SaveChooser.setAcceptAllFileFilterUsed(false);
FileNameExtensionFilter filter = new FileNameExtensionFilter(".prot projects", "*.prot");
SaveChooser.setFileFilter(filter);
SaveChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
FileView view = new main.COBFileView();
SaveChooser.setFileView(view);
swingnode.setContent(SaveChooser);
SaveDialog.getDialogPane().setContent(swingnode);
Window window = SaveDialog.getDialogPane().getScene().getWindow();
window.setOnCloseRequest(event -> window.hide());
SaveDialog.showAndWait();
Или, с другой стороны, как я могу воспроизвести эту функцию с помощью FX?
Любая помощь будет принята с благодарностью!