2011-11-26 16 views
3

GUI要素へのアクセスに関する質問があります。たとえば、Java上で簡単なGUIプログラムを使用している場合、どのようにしてツリー上のSwing GUI要素階層(メインウィンドウ、フレーム、ボタン、テキストフィールド、コンボボックスなど)を読み込んで保存できますか?Java GUIの読み込みと保存

+0

あなたは階層にアクセスするか、ディスクにそれをシリアル化し、後でそれを再構築について話している:?あなたは、あなたが読んで/ファイルから/保存したいのJFrameを持っているあなたは、以下ないと言いますか – Bill

+0

まず、この階層にアクセスする必要があります。後で、シリアライズする必要があるかもしれません。ランタイムUI要素でコード内の特定のイベントに関連付ける(マップする)ためにEventDispatcherを使用する必要があるためです。これは私の目標なので、可能ですか? – 100798

+0

あなたは何を得ているのかはあまり明確ではありません。 gui上のイベントをマップして特定のビットのコードを呼び出すことは非常に簡単です。 – Bill

答えて

4

スイングアプリケーションは既にツリー形式で構成されています。あなたがで得ることができるすべてのコンポーネントがサブコンポーネントを持ってい

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

:JFrameのは、子どもたちがが訪問することができ、ルートであるファイルに

これらの要素を保存する
// Assuming component is a container 
((Container)component).getComponents(); 

簡単操作です。ここにあなたを得るために良いarticleがあります。流れの美しさはあなたがソケットを使用するのと同じようにファイルを使用することができるということです

EDIT :) は、このように代わりにソケットのファイルにシリアル化するComponentSerializerコンポーネントを回すと0の変更を必要と:)

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コンポーネントをシリアル化してネットワークを介して送信する、完全に動作するサンプルが含まれています。同じメカニズムを使用して、代わりにあなたのものをディスクに保存することができます – GETah