- PR -

【Javaアプリ】Panelの再描画の方法

1
投稿者投稿内容
Javaスターター
ベテラン
会議室デビュー日: 2004/06/14
投稿数: 67
投稿日時: 2005-04-23 17:19
こんにちは。
現在、Javaアプリ(アプレットではありません)でログイン画面に入って、
ログインに成功したら、違う画面を同じFrame内に表示しようと考えてますが、
なかなかうまくいきません(Labelだけの再描画ではありません。)。
具体的には、元の画面が中途半端にしか消えず、新しい画面が表示されないという
症状になっています。
javaアプリの本格的な作成に関するサイトを探しているのですが、
なかなか見つからず、困ってます。

解決方法、または参考になるサイトをご存知の方、
ぜひともアドバイスよろしくお願いいたします。

●全体的な流れ
public class ButtonPressTest extends Frame {
  ・・・
  //フィールド変数の宣言
  ・・・
private Panel getPanel() {
  //初期化時
  if (Panel == null) {
    //ログイン画面の作成
Panel = new Panel();
Panel.add(getTextField(), null);
Panel.add(getButton1("ログイン"), null);
nowdisp=1;
  //ログイン時
  } else if(nowdisp == 1){
     // ログイン完了後の作成
Panel.setSize(261, 58);
Panel.add(getLabel1(), null);
Panel.add(getButton3(), null);
     ・・・
nowdisp=2;
  }
return Panel;
}
private EButton getEButton1() {
if (eButton1 == null) {
eButton41 = new EButton();
eButton41.setBounds(141, 83, 120, 54);
eButton41.setLabel("change disp");
eButton41.addActionListener
          (new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
         {
 System.out.println("actionPerformed(change disp)");
          // TODO Auto-generated Event stub actionPerformed()
 getEPanel();  
         //ここでnowdisp=1になっており、1の処理を通っていることを確認
 repaint();
         }
         });
         }
return eButton1;
}
・・・
public static void main(String[] args) {
ButtonPressTest bptest = new ButtonPressTest();
bptest.show();
}
public ButtonPressTest () {
super();
initialize();
}

private void initialize() {
this.setSize(300,200);
this.setTitle("Frame");
this.add(getPanel(), java.awt.BorderLayout.CENTER);
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) { //省略
}
});
}
}



[ メッセージ編集済み 編集者: Javaスターター 編集日時 2005-04-23 17:21 ]
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2005-04-24 04:59
再描画がうまくいっていないのではなく、getPanel()で生成したPanelにnowdisp の値が変更されても、removeせずに次々にaddしてるからではないですか?

javaアプリの本格的な作成に関するサイトを探しているのですが、
なかなか見つからず、困ってます。

「本格的な作成」がどの程度かわかりませんが、検索すればいくらでもあると思います。
本もいろいろ出てますし。

ところで、なぜSWING,SWTでなく、AWTで作成するのですか?


パテ太
ベテラン
会議室デビュー日: 2004/08/16
投稿数: 64
お住まい・勤務地: 千葉・東京
投稿日時: 2005-04-24 08:47
CardLayoutを使用して画面を切り替えたらいかがでしょうか?
UI で AWT を使用するならこの辺でしょうか。
Javaスターター
ベテラン
会議室デビュー日: 2004/06/14
投稿数: 67
投稿日時: 2005-04-25 01:03
未記入さん、バテ太さん、回答ありがとうございました。
未記入さんの言うとおりで、removeすることによって、解決しました。
バテ太さんの方法も検討してみます。
本当に助かりました。ありがとうございました。
なお、参考までに、Awtを使用している理由はJ2meを使おうと思っているからです。
1

スキルアップ/キャリアアップ(JOB@IT)