Java: Каков наилучший способ чтения сериализованного объекта? - PullRequest
0 голосов
/ 15 марта 2012

Я заранее извиняюсь, если повторяю вопрос. Если я, пожалуйста, перешлите меня на соответствующий пост.

У меня есть JPanel, в котором довольно много компонентов. Затем он помещается на JFrame. Я хотел бы дать пользователю возможность сохранить свой текущий сеанс (т.е. сериализовать JPanel с неизменными значениями его подкомпонентов). Затем у пользователя должна быть возможность загрузить предыдущий сеанс (это, в основном, JPanel с сохраненным выбором полей и текстовых полей).

Мой вопрос касается чтения объекта JPanel из файла. После того, как я прочитал JPanel из файла, нужно ли читать каждое из его текстовых полей и комбинированных списков или я могу просто заменить свой JPanel на сохраненный JPanel? Насколько я могу понять, единственный способ сделать это - заменить текущую панель на сохраненную панель, например:

  • 1: MyPanel savePanel = (MyPanel) objectInputStream.readObject ();
  • 2: удалить (currentPanel);
  • 3: добавить (сохраненную панель);
  • 4: validate ();

Есть ли что-нибудь, чтобы достичь того, чего я хочу?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 15 марта 2012

Десериализация восстанавливает граф объекта, который был сохранен.Однако посмотрите на Javadoc: на самом деле не рекомендуется сериализовать объекты Swing.Вы можете посмотреть в java.beans.XMLEncoder.

0 голосов
/ 15 марта 2012

Сохраняйте данные, поддерживая панель Swing, а не саму панель. Панель представляет собой презентацию, а не пользовательские данные - вы должны быть в состоянии восстановить состояние панели на основе только пользовательских данных.

Для этого создайте Модель, которая моделирует модель данных панели, а затем изучите сериализатор XML или JSON, который позволит вам сохранить и извлечь данные для модели. Заполните пользовательский интерфейс модели, и вы дадите себе возможность сохранять и обновлять экран из единственной, хорошо содержавшейся точки в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...