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

Opo*_*poe 3 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();
  }
});
Run Code Online (Sandbox Code Playgroud)

Eri*_*son 5

生成一个新线程来计算,等待和更新GUI.

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

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

Stack Overflow上有很多关于每个步骤的详细信息,所以我不会在这里重复这些信息.