gpt4 book ai didi

java - 如何设置向 JTextField 显示结果时间的计时器?

转载 作者:行者123 更新时间:2023-12-01 18:15:45 25 4
gpt4 key购买 nike

我单击 JButton,我应该在 JTextField 中获得下面的最终输出:

01234567

我想设置一个计时器,以便每个数字的结果缓慢显示。

例如(在 JTextField 中),我希望的结果应该这样做:0(1秒后)01(1秒后)012(1秒后)0123......... 01234567(JTextField 中的输出为 01234567)

我目前正在使用 Thread.sleep 但没有得到我想要的结果。我首先单击 JButton:(1秒后)01234567

我目前正在使用该代码

button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try {
textfield.setText("");

for (int i=0; i<8; i++)
{
textfield.setText(i);
Thread.sleep(1000);
}
}
catch (InterruptedException e1) {
e1.printStackTrace();
}
}
});

有没有一种方法可以在不更改“button.addActionListener(new ActionListener()......”的情况下使用Timer??(如果我使用Timer,我希望不使用Thread.sleep)

最佳答案

使用 Swing 计时器,计时器的 actionPerformed 方法将被重复调用,这将是您的“循环”。因此,摆脱方法内的 for 循环,并且绝对摆脱 Thread.sleep(...)

ActionListener timerListener = new ActionListener(){
private String text = "";
private int count = 0;

public void actionPerformed(ActionEvent e){
text += // something based on count
count++;
textField.setText(text);
// code to stop timer once count has reached max
}
});

例如,

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.*;

@SuppressWarnings("serial")
public class Tester extends JPanel {
public static final int TIMER_DELAY = 1000;
public static final String TEST_TEXT = "01234567";
private JTextField textField = new JTextField(10);
private JButton button = new JButton(new ButtonAction());
private Timer timer;

public Tester() {
add(textField);
add(button);
}

private class ButtonAction extends AbstractAction {

public ButtonAction() {
super("Press Me");
putValue(MNEMONIC_KEY, KeyEvent.VK_P);
}

@Override
public void actionPerformed(ActionEvent e) {
if (timer != null && timer.isRunning()) {
return;
}
textField.setText("");
timer = new Timer(TIMER_DELAY, new TimerListener());
timer.start();
}
}

private class TimerListener implements ActionListener {
private String text = "";
private int counter = 0;

@Override
public void actionPerformed(ActionEvent e) {
text += TEST_TEXT.charAt(counter);
textField.setText(text);
counter++;
if (counter >= TEST_TEXT.length()) {
timer.stop();
}
}
}

private static void createAndShowGui() {
Tester mainPanel = new Tester();

JFrame frame = new JFrame("Tester");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

关于java - 如何设置向 JTextField 显示结果时间的计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29709763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com