2012-03-15 4 views
0

질문을 반복하는 경우 사전에 사과드립니다. 내가있는 경우 관련 게시물로 전달해주십시오.Java : 직렬화 된 객체를 읽는 가장 좋은 방법은 무엇입니까?

거기에 꽤 많은 구성 요소가있는 JPanel이 있습니다. 그런 다음 JFrame에 배치됩니다. 사용자에게 현재 세션을 저장할 기회를 주려고합니다 (즉, 하위 구성 요소 값이 그대로 유지 된 상태로 JPanel을 serialize). 사용자는 이전 세션 (기본적으로 comboxes & 텍스트 필드 항목의 저장된 선택과 함께 JPanel입니다)을로드 할 수있는 기회를 가져야합니다.

제 질문은 파일에서 JPanel 객체를 읽는 것과 관련이 있습니다. 파일에서 JPanel을 읽은 후에는 텍스트 필드와 콤보 상자를 모두 읽어야합니까? 아니면 단순히 JPanel을 저장된 JPanel로 바꿀 수 있습니까? 는 지금까지 내가 해결할 수로,이 작업을 수행 할 수있는 유일한 방법은 이런 식으로 저장 패널이 현재 패널을 교체하는 것입니다 :

  • 1 : MyPanel savedPanel = (MyPanel) objectInputStream.readObject();
  • 2 : 제거 (currentPanel);
  • 3 : add (savedPanel);
  • 4 : validate();

내가 원하는 것을 달성하기위한 방법이 있습니까?

감사합니다.

+1

이걸 시도하면 어떻게됩니까? –

답변

5

역 직렬화는 저장된 오브젝트 그래프를 복원합니다. 그러나 Javadoc을 참조하십시오. Swing 객체를 직렬화하는 것은 실제로 권장되지 않습니다. java.beans.XMLEncoder을 들여다 볼 수 있습니다.

+0

인상적인 응답 시간입니다. 감사합니다. 나는 대안으로 그것을보고 바쁘다. 개체 그래프를 직렬화와 다른 것으로 저장하고 있습니까? 아니면 어느 쪽도 스윙 응용 프로그램을 사용하지 않았다고 말하고 있습니까? Thanks –

+0

@StevePaul Serialziation은 객체 그래프를 저장하고 비 직렬화로 복원합니다. 이것은, 모두 오브젝트 직렬화 스펙으로 지정되고 있습니다. 두 번째 질문을 이해하지 못합니다. 비 직렬화 없이는 직렬화에 많은 포인트가 없으며 직렬화없이 비 직렬화 할 수 없습니다. 직렬화 * in toto *는 Swing 객체에 대해서는 더 이상 사용되지 않으며 모든 Swing 클래스에 대한 Javadoc은 so라고 말합니다. – EJP

+0

오 그 스윙 개체에 대한 직렬화가 권장되지 않는다는 것을 알지 못했습니다. 이제 java.beans.XMLEncoder에 관한 귀하의 팁 오프를 이해합니다. 조언 해주셔서 감사합니다. –

0

패널 자체가 아닌 스윙 패널의 데이터를 저장하십시오. 패널은 사용자 데이터가 아닌 프리젠 테이션입니다. 사용자 데이터만으로 패널의 상태를 재구성 할 수 있어야합니다.

이렇게하려면 패널의 데이터 모델을 모델링 한 모델을 만든 다음 모델의 데이터를 유지하고 검색 할 수있는 XML 또는 JSON 직렬기를 살펴보십시오. 모델에서 UI를 채우면 코드의 단일 지점에서 화면을 저장하고 새로 고치는 기능을 사용할 수 있습니다.

관련 문제