Как создать диалоговое окно, которое появится после 5 минут бездействия пользователя?(Джава) - PullRequest
1 голос
/ 28 октября 2010

У меня есть диалоговое окно:

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

Когда пользователь нажимает «ОК», он переходит прямо к Jframe, который просит пользователя ввести температуру с помощью ползунка, а затем нажимает кнопку, которая переводит ее к следующему набору вещей.

В любом случае, я хочу создать некий невидимый обратный отсчет после того, как пользователь нажмет «ОК», поэтому после 5 минут бездействия в меню Jframe в верхней части 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)?

Ответы [ 3 ]

2 голосов
/ 28 октября 2010

Вы можете использовать TimerTask с Timer:

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

тогда, когда вы хотите запланировать свою задачу:

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

Этот тип таймеров также может бытьотменено методом cancel()

1 голос
/ 28 октября 2010

По сути, после того, как отображается начальная панель параметров, запустите Timer.(A javax.swing one)

Вам также понадобится переменная уровня класса, указывающая, была ли введена временная температура.

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();

Вам нужно будет щелкнуть флажок, когда пользовательвводит темп в форму.

1 голос
/ 28 октября 2010

Прочтите раздел из учебника по Swing на Как использовать таймеры . Когда появится диалоговое окно, вы запускаете таймер. Когда диалог закрыт, вы останавливаете таймер.

Следует использовать Swing Timer, а не TimerTask, чтобы при запуске Timer код выполнялся в EDT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...