JavaFX: использование Swing Jfilechooser - PullRequest
0 голосов
/ 21 мая 2018

Во-первых, я знаю, что мой вопрос может занять некоторое время, потому что 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?

Любая помощь будет принята с благодарностью!

...