JFrame上添加、刪除Jpanel后動態顯示界面問題


JFrame中動態添加或者刪除JPanel后總是不正確顯示需要的界面問題:

1.刪除panel后還是顯示之前的界面,新刪除的panel在界面上並沒有被刪除;

2.刪除panel1后添加新的panel2,只顯示刪除panel1后的界面,新添加的panel2不顯示;

盡管使用了Pane().repaint();重繪方法,照理來說是可以重新繪制新的界面的,但是界面並沒有更新。

那么這里就分兩種情況處理:

1.刪除或者添加一個非JFrame的直接子控件。

scrollPanel.removeAll();//刪除scrollPanel的所有子控件,或者scrollPanel.remove(comp);刪除scrollPanel的某個控件。

scrollPanel.updateUI();

這里一定要用updateUI()函數,當scrollPanel的內容或者說界面發生變化時需要更新其UI顯示。添加也同理。

contentPanel.add(keyLable);//contentPanel添加一個控件

contentPanel.updateUI();

2.刪除一個JFrame的直接子控件。

resultFrame.getContentPane().remove(exceptionLabel);//JFrame刪除其直接子控件exceptionLabel

resultFrame.getContentPane().repaint();

因為JFrame沒有updateUI()函數,所以這里使用重繪函數repaint();

3.JFrame動態添加一個控件,不管這個控件是否還有很多子控件,情況都一樣,可以對其子控件使用updateUI()函數。

但是,這還遠遠不夠,你會發現不管添加了什么控件,這個時候界面就是沒有更新。

原因是JFrame沒有更新。

你可以嘗試放大或者縮小窗口,界面就更新了。

那么怎么處理呢?不可能每次都要放大或縮小窗口吧,所以,這里就需要對JFrame進行刷新其界面的操作。

方法1.重新顯示窗體。

resultFrame.getContentPane().add(scrollPanel);
resultFrame.setVisible(false);
resultFrame.setVisible(true);

方法2.重新驗證窗體。

resultFrame.getContentPane().add(scrollPanel);
resultFrame.invalidate();
resultFrame.validate();

方法3.重置其窗體大小。

resultFrame.getContentPane().add(scrollPanel);
resultFrame.pack();
resultFrame.setSize(1000, 600);

方法遠不止上面這幾種,但是僅通過這個方法resultFrame.getContentPane().repaint();這個一定是不行的,他不會真正同步重新更新JFrame,除非有外界因素更新到JFrame,不然界面是不會刷新的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM