所以,我提出在用戶具有添加或刪除面板的能力的GUI。爲了模擬這一點,我做了一個TimerTask
,它取目標JPanel
的名稱和包含JPanel
的父項。
它倒數爲0,之後它將從父項中刪除JPanel
,並在父項和祖父項上調用repaint()
。
儘管舊面板被刪除,但父項中包含的其他組件不能代替它。從圖中可以看出,滾動條仍然表示2個組件。
我必須手動向下拖動滾動條才能看到它發生了變化,這就是當下面的組件取代它的位置時。
爲什麼會發生這種情況?
這裏是如何的組件嵌套:因爲JPanels
與從XML文件中的數據填充,並使用JAXB所以
JScrollPane (grandparent)
|
|-> JPanel (parent)
|
|-> JPanel (target)
SSCCE是不可能的..這是不可能的:(但這裏是一個從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();
}
}
你仍然可以做一個sscce,只是不用擔心xml數據等。簡化問題,男人。另外,不要使用帶Swing應用程序的java.util.Timer,而要使用javax.swing.Timer。包含'JScrollPane'的'JFrame'上的 –