1

我有一个对话框:

JOptionPane.showMessageDialog(null,"Once medicine is given, measure temperature within 5 minutes." ,"Medication" ,JOptionPane.PLAIN_MESSAGE); 

当用户按下“确定”时,它直接进入一个 Jframe,要求用户使用滑块输入温度,然后按下一个按钮,将其带到下一组。

无论如何,我想在用户按下“确定”后创建某种不可见的倒计时,因此在 Jframe 菜单上闲置 5 分钟后,JFrame 顶部应出现一个警告对话框,并显示类似“需要注意”的内容。

这让我想起了 actionListener。但它将由非物理元素调用,5 分钟,(不是通过任何按钮单击)。

所以也许代码应该是这样的:

JOptionPane.showMessageDialog(null,"Once medicine is given, measure temperature within 5 minutes." ,"Medication" ,JOptionPane.PLAIN_MESSAGE); 


temperature_class temp = new temperature_class(); // going to a different class where the the Jframe is coded

    if (time exceeds 5 minutes) { JOptionPane.showMessageDialog(null, "NEED attention", JOptionPane.WARNING_MESSAGE);}
    else { (do nothing) }

代码工作:

JOptionPane.showMessageDialog(null,"measure temp" ,"1" ,JOptionPane.PLAIN_MESSAGE); 

int delay = 3000; //milliseconds
 ActionListener taskPerformer = new ActionListener() {
 public void actionPerformed(ActionEvent evt) {

JOptionPane.showMessageDialog(null,"hurry." ,"Bolus Therapy Protocol" ,JOptionPane.PLAIN_MESSAGE); } };
new Timer(delay, taskPerformer).start();

temperature_class temp = new temperature_class();

但是,我希望它只做一次。那么如何调用 set.Repeats(false)?

4

3 回答 3

2

您可以将 aTimerTask与 a 一起使用Timer

class PopTask extends TimerTask {
  public void run() {
    JOptionPane.show...
  }
}

然后你想在哪里安排你的任务:

new Timer().schedule(new PopTask(), 1000*60*5);

这种定时器也可以用cancel()方法取消

于 2010-10-28T15:43:01.607 回答
1

阅读 Swing 教程中有关如何使用计时器的部分。当显示对话框时,您启动计时器。当对话框关闭时,您将停止计时器。

应该使用 Swing Timer,而不是 TimerTask,这样如果 Timer 触发,代码将在 EDT 上执行。

于 2010-10-28T15:43:27.737 回答
1

本质上,在显示初始选项窗格后,启动一个Timer. (javax.swing一个)

您还需要一个类级变量来指示是否已经输入了温度。

JOptionPane.showMessageDialog(...);
tempHasBeenEntered = false;
Timer tim = new Timer(5 * 60 * 1000, new ActionListener() { 
                 public void actionPerformed(ActionEvent e) { 
                     if (!tempHasBeenEntered)
                         JOptionPane.showMessageDialog("Hey, enter the temp!!"); 
                 } 
}
tim.setRepeats(false);
tim.start();

一旦用户在表单中输入临时值,您将需要翻转标志。

于 2010-10-28T15:45:06.270 回答