2011-11-26 2 views
3

GUI 요소 액세스에 관한 질문이 있습니다. 예를 들어, Java에서 간단한 GUI 프로그램을 사용하면 트리 (예 : 메인 윈도우, 프레임, 버튼, 텍스트 필드, 콤보 박스 등)에서 Swing GUI 요소 계층 구조를 읽고 저장할 수 있습니다.Java GUI 읽기 및 저장

+0

계층 구조에 액세스하거나 디스크에 직렬화 한 다음 나중에 다시 구성하는 방법에 대해 이야기하고 있습니까? – Bill

+0

먼저이 계층 구조에 액세스해야하고 런타임에 UI 요소를 코드 내의 특정 이벤트와 관련시키기 위해 EventDispatcher를 사용해야하는 등의 다른 요소를 구현해야하므로 직렬화해야 할 수도 있습니다. 이게 내 목표 야, 그래서 가능하지? – 100798

+0

당신이 무엇을 얻고 있는지 명확하지 않습니다. Gui의 이벤트를 매핑하여 코드의 특정 비트를 호출하는 것은 매우 간단합니다. – Bill

답변

4

스윙 응용 프로그램은 이미 나무로 구성되어 있습니다.

// Assuming component is a container 
((Container)component).getComponents(); 

을 파일로 쉽게 조작이 요소입니다 저장 : 당신에 의해 얻을 수있는 하위 구성 요소가

Component[] components1 = mFrame.getContentPane().getComponents(); 

모든 구성 요소를 다음 JFrame의 어린이가 방문 할 수 루트입니다. 여기에 좋은 article 당신을 얻을 수 있습니다.

편집 스트림의 아름다움은 소켓 : 는 따라서 대신 소켓의 파일로 직렬화하는 ComponentSerializer 구성 요소를 회전을 사용하는 것처럼 당신이 파일을 사용할 수 있다는 점입니다 0 변경 :

이 필요 파일을 저장/읽으려는 JFrame이 있다고 가정하면 다음을 수행합니다.

OutputStream output = new FileOutputStream("FileName.bin"); 
JFrame myFrame = new JFrame(); 
ComponentSerializer serializer = new ComponentSerializer(); 
serializer.write(myFrame, output); 

// Reading from file 
InputStream in = new FileInputStream("FileName.bin"); 
ComponentSerializer serializer = new ComponentSerializer(); 
JFrame myFrame = (JFrame) serializer.read(in); 
myFrame.setVisible(true); 
+0

또한'Serializable'에 대한 대안으로'XMLEncoder' /'XMLDecoder'를 고려하십시오. –

+0

@ GETah : 구성 요소 및 하위 구성 요소를 사용하여 어떻게 수행 할 수있는 간단한 (전체) 예를 제공 할 수 있습니까? 이 GUI 구성 요소 (전체 트리)를보다 자동화되고 동적으로 캡처 할 수 있는지 생각 중이 었습니다. – 100798

+0

답변 끝에 게시 한 기사에는 GUI 구성 요소를 serialize하고 네트워크를 통해 보내는 완벽한 예제가 포함되어 있습니다. 동일한 메커니즘을 사용하여 디스크에 물건을 저장할 수 있습니다. – GETah