Java Swing 如何使这个计数器工作?

标签 java swing counter toolkit

每当我的计数器达到 4 时,我希望它播放哔声并返回“1”,然后再次计数到 4 播放哔声,依此类推。

我可能不应该把它放在标签中,因为计数器根本不运行! 我没有收到任何错误,但标签上写着;计数器是 4,不计数或任何东西。

你能帮我让这个计数器正常工作吗?我也用过 printline 但那个 也给出了一些错误。

我的计数器代码是这样的:

button1.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent arg0) {

    label1.setVisible(true);
    int counter = 1;

    while(counter < 5 )
    {
      label1.setText("counter  is " + counter);
      counter = counter + 1 ;
    }

    counter = 1;
    tk.beep();
  }
});

最佳答案

生成一个新线程来计数、等待和更新 GUI。

您在事件调度线程中完成所有这些工作,这是唯一更新 GUI 的线程。因此,当您设置标签的文本时,它不会在屏幕上更新,直到方法返回并且事件调度线程处理重绘操作。

您需要生成一个新线程来执行此操作,而不是仅仅在一个立即执行的循环中运行它。只需让 actionPerformed 方法产生一个新的 Thread 来处理它。在此线程中循环、计数和更新,在更新之间等待 Thread.sleep。要更新标签文本,请创建一个新的 Runnable,它将标签更新为下一个值,并使用 SwingUtilities.invokeLater 将其放在事件调度线程中。保持此线程在后台运行,直到您需要它为止。我建议在每个循环中检查关闭状态 boolean 值,并在它设置为 false 时退出。这样,你可以随时干净利落地关闭线程。或者,如果您希望它倒计时并只发出一次蜂鸣声,您可以让线程在一次迭代计数后结束。

Stack Overflow 上有很多问题详细说明了每个步骤,所以我不会在这里重复这些信息。

关于Java Swing 如何使这个计数器工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512960/

相关文章:

java - 如何循环直到用户的输入满足条件?

java - 单击按钮时 JTable 单元格发生变化?

python-3.x - CSV 计数重复项

java - 如果组件对于方法而言是本地的,则从其自己的监听器引用该组件

java - 具有 HTML 命名操作和助记符的 JButton

当计数器达到某个点时Java中断for循环

java - 计算多维数组中的字符数,Java

java - 选择合适的数据结构

java - Android Camera Preview - 只取一部分屏幕数据

java - Apache Derby 驱动程序未自动加载