【问题标题】:Update JTextFields text every 3 seconds after pressing button按下按钮后每 3 秒更新一次 JTextFields 文本
【发布时间】:2012-04-28 21:36:40
【问题描述】:

所以我想要做的是,当我按下按钮时,JTextField 文本开始每 3 秒更新一次新值。我已经尝试过线程睡眠方法,但它会在睡眠时间冻结整个程序,并且在它结束后文本字段会获取最新的输入。所以这里是我正在尝试做的更好解释的例子。

只要有可用值,我就会每 3 秒按下 JButton 将数字放入 JTextFiel 中。我不希望它附加新文本,只需用新文本替换旧文本。有人知道我该怎么做吗?提前致谢。

【问题讨论】:

    标签: java swing timer jbutton jtextfield


    【解决方案1】:

    您应该使用javax.swing.Timer

    final Timer updater = new Timer(3000, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // update JTextField
        }
    });
    JButton button = new JButton("Click me!");
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            updater.start();
        }
    });
    

    Timer 不会阻塞事件调度线程(就像 Thread.sleep 那样),因此它不会导致您的程序无响应。

    【讨论】:

    • 此代码在我按下按钮后仅更新了一次文本字段。我也尝试使用 for 循环,但它仍然只更新文本字段一次。任何想法为什么?
    • 已解决,感谢您的解决方案。我的变量只是自我重置,所以我认为它没有更新。
    • @RohitMalish 你能分享你的解决方案吗?
    【解决方案2】:

    您不能在 EDT 中睡觉。您可以使用 swingworker(更好的解决方案)或执行以下操作:

    //sleep in new thread
    new Thread (new Runnable() {
        public void run() {
            Thread.sleep(3000);
             //update UI in EDT
             SwingUtilities.invokelater(new Runnable()  {
                  public void run() {updateYourTextHere();}
              });
        }
    }).start();
    

    【讨论】:

      【解决方案3】:

      您需要在单独的线程上完成“工作”。在这里查看一些答案:Java GUI Not changing

      【讨论】:

        猜你喜欢
        • 2021-10-02
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2018-02-25
        • 2021-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多