※ ChatGPTを利用し、要約された質問です(原文:パネルの上書きをしたい)
パネルの上書きをしたい
このQ&Aのポイント
未定の個数のJListが追加されるプログラムを作成したが、2回目の呼び出し時には前回の要素が残ったまま表示される問題が発生した。
問題を解決するために、JPanelをaddする前に初期化を行ったが、パネルが重なって表示される状態になった。
さらに、同じパネルに複数回貼り付ける場合、貼り付ける直前に同じ箇所に貼り付けられていたパネルはどうなるのか疑問がある。
何個のJList等が作成されるか未定で、必要になればその都度JPanelに追加されるというプログラムを考えています。以下のクラスを作成し、呼び出し指定したJPanelに貼り付けることをしました。
2度目の呼び出しは一度目に呼び出して貼り付けられたJList等は不要で表示しないでよいのですが、残したまま追加という形で表示されました。
以前のものが残されているのはJPanelが新しいものではないということがわかりましたのでaddcomを呼び出す前に一度初期化しました。
ですが今度パネルが重なるのか文字が重なる(はっきり重なるわけではなくうっすら文字のようなものが見えます)状態になりました。
表示しているJPanelは別のJPanelのボーダーレイアウトのcenterにその都度貼り付けています。
クラスには問題はないと思われますか?
毎回同じパネルに貼り付ける場合貼り付ける直前に同じ箇所に貼り付けられていたパネルはどうなるのでしょうか?単に貼り付けられなくなるだけなのでしょうか?それとも上から貼り付けられるだけなのでしょうか?いろいろ試していると上から貼り付けられるような気がします。
class addcom{
JPanel addpanel;
Vector listaddress;
addcom(JPanel addpanel,Vector attribute,Vector listaddress){
this.listaddress = listaddress;
this.addpanel = addpanel;
}
void addList(Vector setattribute){
JList list = new JList(setattribute);
addpanel.add(list);
listaddress.add(list);
}
void addLabel(String str,Vector labeladdress){
JLabel label = new JLabel(str);
addpanel.add(label);
labeladdress.add(label);
}
void addButton(String str,Vector buttonaddress){
JButton button = new JButton(str);
addpanel.add(button);
buttonaddress.add(button);
}
}