2012-02-28 3 views
7

У меня есть приложение Java Swing, которое содержит кучу фреймов, в свою очередь, в основном содержит таблицы, отображающие большие объемы данных. Поскольку для запуска всех окон и таблиц при запуске всегда сложно, и я хотел бы реализовать функциональность «workspace», чтобы пользователь мог сохранить настройку предпочтения и при запуске выбрать автоматическую загрузку сохраненного рабочего пространства в все окна и таблицы отображаются как ранее сохраненные. В частности, параметры, которые я хочу хранить в рабочей области являются:Java Swing сохранить и загрузить рабочее пространство/настройки

  • Активных окон (JFrame) и их размеров и положения на экране
  • настройки Таблицы, в том числе выбранных столбцов, порядок следования столбцов, ширина столбцов, сортировка, фильтрация

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

+1

Всегда есть «сериализовать весь графический интерфейс», но я подозреваю, что 1) не будут сериализуемые части этих графических интерфейсов 2), что это будет хлопот, чтобы работать правильно. –

+0

Я считаю, что вы правы по обоим подозрениям. – hgus1294

+1

вы можете рассмотреть возможность использования (лучше) Swing Application Framework, которая поддерживает сохранение состояния приложения - среди других тонкостей - безболезненно (хотя переход на новую структуру может быть слишком инвазивным :-) – kleopatra

ответ

7

В этом случае очевидное решение, java.util.prefs.Preferences, вероятно, является правильным. RCPrefs из этого game - простой пример, демонстрирующий сохранение множества типов данных, включая enum. Точная реализация сильно зависит от приложения. Хотя это утомительно, это не должно быть особенно сложным. Для удобства example использует статические методы; кадры и предпочтения таблицы, вероятно, стоят каждого класса.

+0

Я бы приветствовал встречный пример. – trashgod

+0

Спасибо. Пример был полезен, и я подумал, что идея создания классов рабочего пространства имеет смысл. Я создал класс WsFrame, который содержит общие настройки, такие как положение и размер. Этот объект может содержать одну или несколько конкретных настроек, таких как 'WsTable' (для параметров таблицы). Я отказался от хранения этой информации с помощью «Предпочтения» и решил просто сериализовать список объектов WsFrame через XStream и сохранить как xml (поскольку я ленив, и это удобно для просмотра/редактирования вывода). На самом деле работает очень хорошо. Благодарю. – hgus1294

+0

Отлично. Я могу быть испорчен, так как моя платформа использует XML для реализации «Предпочтения». Пинг меня, если вы добавите это как контрастный ответ; Я думаю, это было бы полезно. – trashgod