当前位置: 代码迷 >> J2SE >> Swing 怎么更新界面
  详细解决方案

Swing 怎么更新界面

热度:199   发布时间:2016-04-24 01:47:16.0
Swing 如何更新界面?
情况是这样的:比如有一个JFrame窗口,上面有个标签。

当标签上的文字改变之后,JFrame窗口如何刷新界面?

再如,许多软件的界面上的某个安静消失后,又该怎样刷新界面?

是要用MVC模式吗,什么意思,怎么用呢?

------解决方案--------------------
对Swing里面一个控件设置text等属性,程序员不须用自己去调用刷新界面的函数,Swing知道自己什么时候去刷新。Swing的底层应该是用MVC模式实现这个机制的,它会同时做一些优化————合并刷新,例如设置了很多个控件的text, 它可能会把这些刷新合并在一起,只做一次。
------解决方案--------------------
我也在弄Swing。。要刷新界面看你刷新所有还是局部了。如果是所有的话建议这句 this.dispose();
this.setVisible(true);-----this是当前对象
------解决方案--------------------
如果只是普通的单次刷新,swing会自动的刷新,不用手动操作。 如果文字在短时间内大量的变动需要开一个线程去更改,如果不开线程的话 会发现界面只在最后结束的时候刷新一遍,只停留在最后一次更改的结果,中间的过程是不会刷新的
------解决方案--------------------
我还是用个例子来说明如何更改标签的值以及添加删除组件吧
Java code
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class TestFrame extends JFrame{    private JLabel lblText = new JLabel("Text");    private JButton btnChangeText = new JButton("Change Text");    private JButton btnAdd = new JButton("Add Button");    private int i = 0;        public TestFrame()    {        this.setLayout(new BorderLayout());                JPanel panel1 = new JPanel();        panel1.add(lblText);                final JPanel panel2 = new JPanel(new GridLayout(0, 5));                JPanel panel3 = new JPanel();        panel3.add(btnChangeText);        panel3.add(btnAdd);                add(panel1, BorderLayout.NORTH);        add(panel2, BorderLayout.CENTER);        add(panel3, BorderLayout.SOUTH);                btnChangeText.addActionListener(new ActionListener()    //改变标签的时候,只要改了标签的text值,界面就会相应变化            {                public void actionPerformed(ActionEvent event)                {                    if (lblText.getText().equals("Text"))                    {                        lblText.setText("12345");                    }                    else                    {                        lblText.setText("Text");                    }                }            });                btnAdd.addActionListener(new ActionListener()    //添加组件的时候,add完需要validate才能生效            {                public void actionPerformed(ActionEvent event)                {                    final JButton button = new JButton("Delete " + i);                    i++;                    panel2.add(button);                    button.addActionListener(new ActionListener()                        {                            public void actionPerformed(ActionEvent event)    //删除组件的时候,先把组件设为不可见,然后删去,最后validate                            {                                button.setVisible(false);                                panel2.remove(button);                                panel2.validate();                                TestFrame.this.pack();    //这句话主要是用来调节界面大小,也可以不要这句,自己手动调节界面大小                            }                        });                    panel2.validate();                    TestFrame.this.pack();                }            });    }        public static void main(String[] args)    {        EventQueue.invokeLater(new Runnable()            {                public void run()                {                    JFrame frame = new TestFrame();                    frame.pack();                    frame.setLocationRelativeTo(null);                    frame.setVisible(true);                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                }            });    }}