展开全部
原因分析: Content 类,并没有被创建, 也没有被使用. 所以无法实现动态效果
解决办法: 在getContentPane().add(label, BorderLayout.CENTER);这句代码后面,添加一e68a84e8a2ad3231313335323631343130323136353331333363393133行代码new Thread(new Content()).start();//添加上这句代码
这样就可以创建并启动1个线程去更新文字了...
拓展: 但是使用一个非UI线程去修改Swing的UI,是不推荐的. 对于这种循环更新界面外观, 有1个推荐使用的类javax.swing.Timer; 它相当于一个定时器, 可以按时更新界面外观, 推荐使用.
修改后的代码如下import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;//导入这个类
public class BillBoard extends JFrame {
private static final long serialVersionUID = 1L;
JLabel label;
String[] title;
public BillBoard() {
label = new JLabel();
title= new String[5];
title[0] = "《学通java的二十四堂课》";
title[1] = "《学通jC语言的二十四堂课》";
title[2] = "《学通VC的二十四堂课》";
title[3] = "《学通VB的二十四堂课》";
title[4] = "《学通Php的二十四堂课》";
//窗口属性的设置
setTitle("电子广告牌");
// setBounds(100, 100, 300, 120);//设置位置在(100,100) 宽高(300,120)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// setLayout(new BorderLayout());//默认就是边界布局,可以省略不用指定
setResizable(false);
setSize(300, 120);// 设置宽高
setLocationRelativeTo(null);// 这句代表表示居中了。之前 setBounds里设置的坐标位置100,100就失效了
getContentPane().add(label);// BorderLayout.CENTER 可以省略, 默认就是在 中央
label.setText("明日科技新书推荐:" + title[new Random().nextInt(title.length)]); // 为了更自然, 最开始的时候label也显示下内容
new Timer(1000, new ActionListener() {// 1000 表示,循环间隔时间。actionPerformed方法里写更新UI的代码
@Override
public void actionPerformed(ActionEvent e) {
label.setText("明日科技新书推荐:" + title[new Random().nextInt(title.length)]);
}
}).start(); // start方法, 启动这个定时器
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
BillBoard bb = new BillBoard();
bb.setVisible(true);
}
});
}
}