gpt4 book ai didi

java - HoneSTLy 对如何将 Swing Timers 应用到我的程序感到困惑,有人可以看看吗?

转载 作者:行者123 更新时间:2023-11-30 08:21:41 25 4
gpt4 key购买 nike

我正在阅读有关 Swing Timers 的文章,该示例看起来与我尝试做的完全不同,因此我发现将其应用于我的程序在逻辑上令人困惑。 我开始觉得我什至不需要计时器。

这是我正在尝试做的事情:

我正在制作一个 JFrame 程序,让用户将信用卡号输入到 JTextField 中。在他们这样做之前,有一个 JLabel,上面写着“请在文本字段中输入您的号码”,然后一旦他们将其输入该字段并按回车键,取决于我的代码是否确定卡号有效, JLabel 将变为“无效”或“谢谢处理”。

但是,我没有找到一种方法让它基于文本进行更改,但没有成功,它似乎只是停留在我最初给它的任何文本上。

所以有人可以查看我的代码并更改它以执行我的要求吗?那太好了。你们过去曾提供过帮助。

public class CreditGraphics {

public String cardNum;
public JFrame frame;
public JPanel panel;
public JLabel label;
public JTextField text;
public Timer timer;

public CreditGraphics() {
frame = new JFrame("HI");
panel = new JPanel();
label = new JLabel();
text = new JTextField(16);
panel.add(label);
panel.add(text);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setPreferredSize(new Dimension(500, 500));
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
label.setText("Hi");
label.setText("Hello");
text.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cardNum = text.getText();
timer = new Timer(2000,this);
timer.setInitialDelay(1000);
timer.start();
}
});
}

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

}
});
}

public void checkCard(){

}
}

最佳答案

您的 Timer 的 ActionListener 存在一些主要问题,因为它正在将匿名内部 ActionListener 对象,即 Timer 的构造函数中的 this 添加到自身。所以它会在 Timer 内部调用与启动 Timer 的 JButton 调用的完全相同的 actionPerformed —— 相当困惑。如果您的程序需要一个计时器,您最好确保为其提供自己的 ActionListener,而不是您现在添加到 JButton 的同一个 ActionListener。

最重要的是,您甚至需要 Swing Timer 吗?我不这么认为,因为您似乎不希望每 xxx 毫秒重复发生一次 Action ,或者在 xxx 毫秒后发生一次 Action ,并且您只想更改文本。我建议您只是在匿名内部 ActionListener 类中更改 JLabel 的文本,然后就这样保留它。如果您的要求不同,那么您需要澄清并扩展您的问题。

所以在半伪代码中,类似于:

public void actionPerformed(ActionEvent e) {
String userText = text.getText();
if (testIfTextValid(userText)) { // some method to test if input OK
label.setText(INPUT_VALID); // String constant for JLabel to display

// here pass the userText to other parts of your code that needs to use it

} else {
label.setText(INPUT_INVALID);
}
}

关于java - HoneSTLy 对如何将 Swing Timers 应用到我的程序感到困惑,有人可以看看吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024115/

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