2012-06-20 87 views
0

出現了一些問題。Panel.add不立即?

構建了一個必須逐步使用的小程序。每一步之後,點擊一個按鈕,下一步應該添加到GUI中。

問題:沒有縮放,添加的內容不可見。在一個應用程序中,您可以通過縮放窗口大小來解決問題,但是在一個小程序中,我無法解決這個問題。

感謝

編輯:

實際上,它看起來水木清華這樣的:

Panel cp = new Panel(new GridLayout(0,2)); 
Panel Block1 = new Panel(new GridLayout(2,2)); 
Panel Block1 = new Panel(new GridLayout(2,2)); 
    ... 

初始化

public void init() 
    { 

    buildBlock1(); 
    buildBlock2(); 


    add(cp); 
    cp.setVisible(true); 
    } 

這裏加入一些空板,那些誰就會得到事後填寫

private void buildBlock1() 
{ 
Block1.add(panel1); 
Block1.add(panel2); 
Block1.add(panel3); 
Block1.add(panel4); 

cp.add(Block1); 
} 

按鈕的ActionListener

private void generatePanel1() 
{ 
    //adding some Components to the subpanel of Block1, which is a subpanel of cp. 
Panel1.add(...); 
cp.repaint(); 
cp.validate(); 
} 
+0

你能提供一些代碼嗎?這將有助於一個小而完整的例子。 – dacwe

+0

你在按下按鈕後調用'repaint()'嗎?聽起來像這可能是你的問題。 – purtip31

+0

實際上我甚至不使用paint()方法,只是將我的應用程序轉換爲aplet。這是否需要? 更新:甚至沒有重繪()它更新得很好 – roqstr

回答

2

現在我沒有,我可以檢查,但增加(和刪除)組件到一個容器通常往往需要進行「驗證」的任何代碼。因此,嘗試

panel.add(...); 
panel.revalidate(); 

API文檔JComponent.revalidate()

驗證此容器及其所有子組件。

支持延期自動佈局。

調用invalidate,然後將此組件的validateRoot添加到需要驗證的組件列表。在所有當前未決事件分派後進行驗證。換句話說,在調用此方法之後,將驗證在向上移動此組件的包含層次結構時找到的第一個validateRoot(如果有)。默認情況下,JRootPane,JScrollPane和JTextField從isValidateRoot返回true。

當屬性值發生變化時,此組件的大小,位置或內部佈局受到影響時,將自動在此組件上調用此方法。這種自動更新不同於AWT,因爲程序通常不再需要調用驗證來更新GUI的內容。 validate方法用於使容器再次佈置其子組件。在容器顯示後,應該調用此容器的子組件(添加到容器中或從容器中移除,或者更改與佈局相關的信息)。

+0

剛剛編輯原始帖子,請再看一遍 – roqstr

+0

當我使用eclipse標記applet時,它的工作正常,在FF13中它只是不會更新。 – roqstr

+0

IE不錯.. – roqstr