そのため、ユーザーがパネルを追加または削除できる GUI を作成しています。それをシミュレートするためTimerTask
に、ターゲットの名前とJPanel
を含む親を取る を作成しましたJPanel
。
0 までカウントダウンした後、親から を削除し、親と祖父母 JPanel
を呼び出します。repaint()
古いパネルは削除されますが、親に含まれる他のコンポーネントは代わりに表示されません。図では、スクロール バーがまだ 2 つのコンポーネントを示していることがわかります。
スクロール バーを手動で下にドラッグして変更を確認する必要があります。そのとき、下のコンポーネントが表示されます。
なぜこうなった?
コンポーネントをネストする方法は次のとおりです。
JScrollPane (grandparent)
|
|-> JPanel (parent)
|
|-> JPanel (target)
XMLファイルからのデータが取り込まれ、JAXBを使用しているため、SSCCEは不可能JPanels
です..不可能です:(しかし、ここにからのスニペットがありますTimerTask
import java.util.TimerTask;
import javax.swing.*;
public class RemoverTask extends TimerTask{
StudentPanel s;
JPanel h;
JScrollPane p;
public RemoverTask(StudentPanel s,JPanel holder,JScrollPane pane){
this.s = s;
h = holder;
p = pane;
}
@Override
public void run(){
long x = Integer.MAX_VALUE/2;
JFrame frame = new JFrame("Counter");
JTextArea area = new JTextArea();
JScrollPane pane = new JScrollPane(area);
pane.setPreferredSize(new java.awt.Dimension(350, 350));
frame.add(pane);
frame.pack();
frame.setVisible(true);
while(x > 100){
x = x - 1500;
area.append("Value of X: " + x + "\n");
}
if(!frame.isVisible()){
frame.dispose();
}
h.remove(s);
h.repaint();
pane.repaint();
}
}