在java中制造延迟
我有3个在java中制造延迟,java,swing,Java,Swing,我有3个JLabels,我想在1秒(1000ml)后逐个显示线程睡眠(1000)将不起作用。我不知道,三个JLabel将在完成任务后显示(三个JLabel在3秒后同时显示)。我怎样才能解决它?计时器可以延迟吗?你可以试试这个 int delay = 1000; //milliseconds ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent
JLabel
s,我想在1秒(1000ml)后逐个显示<代码>线程睡眠(1000)代码>将不起作用。我不知道,三个JLabel将在完成任务后显示(三个JLabel在3秒后同时显示)。我怎样才能解决它?计时器可以延迟吗?你可以试试这个
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//...Perform a task...
}
};
new Timer(delay, taskPerformer).start();
您可以阅读更多内容,以下是我的看法:
package demo.javase.swing;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
public class ThreeJLabelsDemo extends JPanel {
private Timer timer;
private JButton startButton;
private int count;
public ThreeJLabelsDemo() {
super(new FlowLayout());
startButton = new JButton("Add 3 JLabels");
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
startButton.setEnabled(false);
timer.start();
}
});
add(startButton);
timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
add(new JLabel("Label" + count++));
revalidate();
repaint();
timer.stop();
if (count < 3) {
timer.restart();
} else {
startButton.setEnabled(true);
count = 0;
}
}
});
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("Three JLabels Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new ThreeJLabelsDemo());
frame.setSize(new Dimension(640, 480));
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
包demo.javase.swing;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.Timer;
公共类3jLabelsDemo扩展了JPanel{
私人定时器;
私有JButton开始按钮;
私人整数计数;
public三个jlabelsdemo(){
超级(新FlowLayout());
startButton=新的JButton(“添加3个JLabel”);
addActionListener(新ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
startButton.setEnabled(错误);
timer.start();
}
});
添加(开始按钮);
计时器=新计时器(1000,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
添加(新JLabel(“标签”+计数+);
重新验证();
重新油漆();
timer.stop();
如果(计数<3){
timer.restart();
}否则{
startButton.setEnabled(真);
计数=0;
}
}
});
}
私有静态void createAndShowGUI(){
JFrame=newjframe(“三个jlabel演示”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(新的三个jLabelsDemo());
框架设置尺寸(新尺寸(640480));
frame.setVisible(true);
}
公共静态void main(字符串[]args){
javax.swing.SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
createAndShowGUI();
}
});
}
}
我相信在这种情况下,你必须使用
javax.swing.Timer
作为Thread.sleep(long)
将简单地阻止应用程序。Thread.sleep工作正常,除非你想让GUI锁定,否则你不能在GUI事件循环中使用它。看看这个,除非你正在做像视频游戏这样复杂的事情,否则就使用swing Timer。