首页上一页 1 下一页尾页 1 条记录 1/1页
关于java窗体中显示动态文本的问题
发表在Java图书答疑
2020-04-13 悬赏:1 学分
《零基础学Java》第11章 Swing程序设计
是否精华
是
否
版块置顶:
是
否
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class Test extends JFrame { public Test() { setBounds(400, 200, 200, 150);// 设置窗体大小及位置 setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭窗体退出游戏 setLayout(null);// 设置绝对布局 // 标签 JLabel test = new JLabel("初始值"); test.setBounds(50, 20, 100, 30); add(test); // 开始按钮 JButton start = new JButton("开始"); start.setBounds(40, 60, 70, 30); add(start); // 为开始按钮添加鼠标点击动作监听事件 start.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new Thread() { public void run() { Random ran = new Random(); for (int i = 1; i < 30; i++) {// 执行30次循环 test.setText(ran.nextInt(30) + 1 + "");// 更换test文本内容点数 try { Thread.sleep(50);// 线程暂停50毫秒 } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } }); } public static void main(String[] args) { new Test().setVisible(true);// 新建窗体并使窗体可见 } }
以上代码,实现在窗体中点击开始按钮后,test标签框动态改变30次随机数的文本内容,运行后没有问题,监听事件中用的是多线程方法。
现在的问题是,如果把监听事件中的多线程方法去掉,部分代码改成:
@Override public void actionPerformed(ActionEvent e) { Random ran = new Random(); for (int i = 1; i < 30; i++) {// 执行30次循环 test.setText(ran.nextInt(30) + 1 + "");// 更换test文本内容点数 try { Thread.sleep(50);// 线程暂停50毫秒 } catch (InterruptedException e1) { e1.printStackTrace(); } } }
运行后再点击开始按钮,发现窗体面板会卡住一会,等监听事件中的方法运行结束后,面板才恢复正常,中途test标签内容并没有显示出变换的动作,最后标签内容为最后一个随机数值。
请问这是为什么,难道这里一定要用多线程才可以?或是还有其它办法解决?
于2020-04-14 08:26:12编辑