JFrame中動(dòng)態(tài)添加或者刪除JPanel后總是不正確顯示需要的界面問(wèn)題:
1.刪除panel后還是顯示之前的界面蓄诽,新刪除的panel在界面上并沒(méi)有被刪除筑舅;
2.刪除panel1后添加新的panel2,只顯示刪除panel1后的界面往堡,新添加的panel2不顯示械荷;
盡管使用了Pane().repaint();重繪方法,照理來(lái)說(shuō)是可以重新繪制新的界面的虑灰,但是界面并沒(méi)有更新吨瞎。
那么這里就分兩種情況處理:
1.刪除或者添加一個(gè)非JFrame的直接子控件。
scrollPanel.removeAll();//刪除scrollPanel的所有子控件穆咐,或者scrollPanel.remove(comp);刪除scrollPanel的某個(gè)控件颤诀。
scrollPanel.updateUI();
這里一定要用updateUI()函數(shù),當(dāng)scrollPanel的內(nèi)容或者說(shuō)界面發(fā)生變化時(shí)需要更新其UI顯示对湃。添加也同理崖叫。
contentPanel.add(keyLable);//contentPanel添加一個(gè)控件
contentPanel.updateUI();
2.刪除一個(gè)JFrame的直接子控件。
resultFrame.getContentPane().remove(exceptionLabel);//JFrame刪除其直接子控件exceptionLabel
resultFrame.getContentPane().repaint();
因?yàn)镴Frame沒(méi)有updateUI()函數(shù)拍柒,所以這里使用重繪函數(shù)repaint()心傀;
3.JFrame動(dòng)態(tài)添加一個(gè)控件,不管這個(gè)控件是否還有很多子控件拆讯,情況都一樣剧包,可以對(duì)其子控件使用updateUI()函數(shù)。
但是往果,這還遠(yuǎn)遠(yuǎn)不夠,你會(huì)發(fā)現(xiàn)不管添加了什么控件一铅,這個(gè)時(shí)候界面就是沒(méi)有更新陕贮。
原因是JFrame沒(méi)有更新。
你可以嘗試放大或者縮小窗口潘飘,界面就更新了肮之。
那么怎么處理呢掉缺?不可能每次都要放大或縮小窗口吧,所以戈擒,這里就需要對(duì)JFrame進(jìn)行刷新其界面的操作眶明。
方法1.重新顯示窗體。
resultFrame.getContentPane().add(scrollPanel);
resultFrame.setVisible(false);
resultFrame.setVisible(true);
方法2.重新驗(yàn)證窗體筐高。
resultFrame.getContentPane().add(scrollPanel);
resultFrame.invalidate();
resultFrame.validate();
方法3.重置其窗體大小搜囱。
resultFrame.getContentPane().add(scrollPanel);
resultFrame.pack();
resultFrame.setSize(1000, 600);
方法遠(yuǎn)不止上面這幾種柑土,但是僅通過(guò)這個(gè)方法resultFrame.getContentPane().repaint();這個(gè)一定是不行的蜀肘,他不會(huì)真正同步重新更新JFrame,除非有外界因素更新到JFrame稽屏,不然界面是不會(huì)刷新的扮宠。