首页上一页 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编辑

购物车
发表新帖
立即签到

已解决







