Swing 如何更新界面?

Oo伍oO 2012-02-15 06:12:51
情况是这样的:比如有一个JFrame窗口,上面有个标签。

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

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

是要用MVC模式吗,什么意思,怎么用呢?
...全文
1159 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ganglong99 2012-05-30
  • 打赏
  • 举报
回复
如果很快速的刷新JLabel就会出问题,比如将:
if (lblText.getText().equals("Text")) {
lblText.setText("12345");
} else {
lblText.setText("Text");
}

改为:
for (int i = 0; i < 100; i++) {
lblText.setText("" + i);
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

测试一下呢?
周靖峰 2012-02-18
  • 打赏
  • 举报
回复
我还是用个例子来说明如何更改标签的值以及添加删除组件吧

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);
}
});
}
}
hongkiton 2012-02-18
  • 打赏
  • 举报
回复
如果只是普通的单次刷新,swing会自动的刷新,不用手动操作。 如果文字在短时间内大量的变动需要开一个线程去更改,如果不开线程的话 会发现界面只在最后结束的时候刷新一遍,只停留在最后一次更改的结果,中间的过程是不会刷新的
  • 打赏
  • 举报
回复
我也在弄Swing。。要刷新界面看你刷新所有还是局部了。如果是所有的话建议这句 this.dispose();
this.setVisible(true);-----this是当前对象
fearlessMore 2012-02-16
  • 打赏
  • 举报
回复
You can use the validate() method contained normally in the JFrame class. But too many times of use of this method will unfortunately decrease your program performance.
nj_dobetter 2012-02-16
  • 打赏
  • 举报
回复
对Swing里面一个控件设置text等属性,程序员不须用自己去调用刷新界面的函数,Swing知道自己什么时候去刷新。Swing的底层应该是用MVC模式实现这个机制的,它会同时做一些优化————合并刷新,例如设置了很多个控件的text, 它可能会把这些刷新合并在一起,只做一次。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧