Ich habe 3 JLabel
s, ich möchte eins nach dem anderen nach 1sec (1000mls) anzeigen. Thread.sleep(1000);
wird nicht funktionieren. Ich weiß nicht, die drei JLabels werden nach Abschluss der Aufgabe angezeigt (3 JLabels werden gleichzeitig nach 3 Sekunden angezeigt). Wie kann ich es lösen? Kann der Timer eine Verzögerung verursachen?Verzögerung in Java machen
-1
A
Antwort
1
Sie können diese versuchen
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//...Perform a task...
}
};
new Timer(delay, taskPerformer).start();
Sie lesen können mehr here
1
Hier ist meine Meinung dazu:
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();
}
});
}
}
ich in solchen Fällen glauben, Sie javax.swing.Timer
als Thread.sleep(long)
verwenden müssen wird die App einfach blockieren.
Thread.sleep funktioniert gut, Sie können es einfach nicht in der GUI-Ereignisschleife verwenden, es sei denn, Sie möchten die GUI sperren. –
Werfen Sie einen Blick auf diese http://StackOverflow.com/q/33105688/3111870 –
Verwenden Sie einfach Swing-Timer, wenn Sie etwas raffiniert wie ein Videospiel tun. – user3437460