repaint与updateUI的作用与区别
从实现效果来看,repaint和updateUI差不多的。
那么rePaint和updateUI实质区别是什么,求解。
实例问题:
开发工具:MyEclipse
Java环境:jre1.6.0
我写了一个界面程序,通过一个button点击弹出图片,做好之后无法显示图片,我以为是图片路径问题,于是在监听里面修改了图片路径,加上了panel.updateUI()就OK了。
然后实现另一个button再添加另一张图片,也不行。在第二个button的监听当中加上了panel.repaint()也OK了。
为了测试repaint和updateUI的区别,我注释掉第二个button监听中的panel.repaint(),这时候,奇迹发生了,居然注释了之后第二个button依然可以完成功能添加另一张图片。
于是,我再注释掉第一个button监听中的panel.updateUI(),奇迹再次发生,现在不使用repaint和updateUI方法也可以实现按钮点击后界面的更新。
为了搞清楚“奇迹”的来源,我写了一个测试。
public class TestDisplay extends JPanel{
JPanel panel=new JPanel();
public TestDisplay(){
JButton button=new JButton("Click");
button.addActionListener(new ButtonTest());
panel.add(button);
add(panel);
}
class ButtonTest implements ActionListener{
public void actionPerformed(ActionEvent arg0) {
panel.add(new JButton("Test"));
panel.updateUI(); add(panel);
}
}
}
public class Test {
public static void main(String[] args) {
TestDisplay td=new TestDisplay();
JFrame myFrame = new JFrame();
myFrame.setContentPane(td);
myFrame.setPreferredSize(new Dimension(700,550));
myFrame.setLocation(300, 150);
myFrame.pack();
myFrame.setVisible(true);
}
}
在此测试程序中,删除了updateUI()<红色部分>方法就无法实现显示中添加一个按钮的功能了,而这个测试程序将updateUI()改成repaint()也无法实现功能。
问题!!!!:那么实现这类事件监听中更改了界面的功能,是否必须调用界面容器的updateUI或repaint方法?如果是,那么请问,应该调用哪一个?两者有何区别?
小弟初次编写GUI程序,急求解答,望各位大侠帮忙!!!