当前位置: 技术问答>java相关
☆☆★★☆☆★★ 会用Swing的高手请进,高分!!! ◇◇◆◆◇◇◆◆◇◇◆◆
来源: 互联网 发布时间:2015-09-02
本文导语: 我用Swing 编了一个界面,但是这个界面中的 某个 JTextField or JButton 改变大小或者位置时 都不能 立即 显示。 我是在一个 监听器(我是设为内部类)的方法里面 改变上述控件的,并且在方法最后加上了this.re...
我用Swing 编了一个界面,但是这个界面中的 某个 JTextField or JButton 改变大小或者位置时
都不能 立即 显示。
我是在一个 监听器(我是设为内部类)的方法里面 改变上述控件的,并且在方法最后加上了this.repaint();
但是每当执行监听器的方法时,并不能立即显示出正确的 图案,但 大小和位置 的确是改变了的 ,
只要 用 将 JFrame 窗体的 大小改变或者 最大化,甚至 用鼠标 点击一下JFrame的边框,都马上刷新
显示出正确的图案。
上述位置及大小的改变我是用 private GridBagConstraints gbc=new GridBagConstraints();
private GridBagLayout bag=new GridBagLayout();
来控制的,我并没有在使用上 出错,因为最后显示的结果对的,就是不能 立刻 显示
我在方法中 加入 container=getContentPane();
contianer.repaint(); 所有的 控件 都加在 ShowPnl (JPanel ,并且是双缓冲的)上 ,ShowPnl.repaint();
都不行,郁闷死了,请 Swing 的高手帮忙,高分相送!!
都不能 立即 显示。
我是在一个 监听器(我是设为内部类)的方法里面 改变上述控件的,并且在方法最后加上了this.repaint();
但是每当执行监听器的方法时,并不能立即显示出正确的 图案,但 大小和位置 的确是改变了的 ,
只要 用 将 JFrame 窗体的 大小改变或者 最大化,甚至 用鼠标 点击一下JFrame的边框,都马上刷新
显示出正确的图案。
上述位置及大小的改变我是用 private GridBagConstraints gbc=new GridBagConstraints();
private GridBagLayout bag=new GridBagLayout();
来控制的,我并没有在使用上 出错,因为最后显示的结果对的,就是不能 立刻 显示
我在方法中 加入 container=getContentPane();
contianer.repaint(); 所有的 控件 都加在 ShowPnl (JPanel ,并且是双缓冲的)上 ,ShowPnl.repaint();
都不行,郁闷死了,请 Swing 的高手帮忙,高分相送!!
|
to Anubis12345 (东大d徒然草) : 我遇到过你类似的问题,
你在要刷新 JFrame 时用以下语句一定ok!!! 哈哈哈........
frame1.validate();
注:frame1是你界面应用程序的一个对象
你在要刷新 JFrame 时用以下语句一定ok!!! 哈哈哈........
frame1.validate();
注:frame1是你界面应用程序的一个对象
|
我也碰到过类似问题,解决办法是:
container.validate();
container.repaint();
如果还不行就用
container.getParent().vilidate();
container.getParent().repaint();
详情e_mail: jamsa3210@163.com
|
this.revalid();试试!
|
最笨的方法,
先对窗口使用
setVisible(false);
再用
setVisible(true);
应该有效的,不过方法就差了一点。
先对窗口使用
setVisible(false);
再用
setVisible(true);
应该有效的,不过方法就差了一点。
|
private GridBagLayout bag=new GridBagLayout();
bag.layoutContainer(??),??为你容器名,试试,或许有效,我在GridLayout中可以正确刷新版面
bag.layoutContainer(??),??为你容器名,试试,或许有效,我在GridLayout中可以正确刷新版面
|
加入你放置所有这些控件的JPanel为panel或者JFrame为frame,则在这个panel或frame里加SwingUtilities.updateComponentTreeUI(this);
如果还解决不了问题,在你每次改变界面后,加一句this.updateUI();
因为Swing的UI是在构造函数时就定下来了,所以你后来改变了其他控件并不知道,所以Swing提供了一个工具SwingUtilities类,这个类很有用的,用SwingUtilities.updateComponentTreeUI(JComponent com);来通知所有有包含关系的控件树来刷新UI。
如果还解决不了问题,在你每次改变界面后,加一句this.updateUI();
因为Swing的UI是在构造函数时就定下来了,所以你后来改变了其他控件并不知道,所以Swing提供了一个工具SwingUtilities类,这个类很有用的,用SwingUtilities.updateComponentTreeUI(JComponent com);来通知所有有包含关系的控件树来刷新UI。
|
SwingUtilities.updateComponentTreeUI(this);
尽量不要用这个方法,代价太大了。
尽量不要用这个方法,代价太大了。
|
本来就是不立即显示的
|
agree jamsa!