Open GoogleCodeExporter opened 8 years ago
Добавить таймер никакой сложности нет.
Есть готовое решение.
Original comment by masterum...@gmail.com
on 12 Nov 2011 at 11:29
Если не сложно поделитесь, а то я думаю эта
тема актуальна для всех у кого внедрения в
организациях, где на кассе работает
несколько пользователей.
Original comment by svinin...@gmail.com
on 10 Dec 2011 at 5:34
Вы еще ждете?))
Простите, я забыл ответить.
Значит повесить таймер достаточно просто,
НО! Только на JTicketsBag...Map. Если юзер открыл
Тикет, то тот будет открыт сколько угодно
времени (ИМХО так и нужно, поэтому я сделал
у себя так)
В JTicketsBag...Map
добавляем новую переменную (javax.swing.Timer)
private Timer m_jtimer;
Добавляем в JPrincipalApp метод, который будет
вызывать собственно выход юзера.
public void exitApp() {
m_appview.closeAppView();
}
И так как доступа к этому методу у нас нет,
то расшариваем его на интерфейс AppUserView:
public void exitApp();
Добавляем новый класс в JTicketsBag...Map, он
маленький и приватный. Будет останавливать
таймер и выбрасывать на окошко авторизации.
private class TimerAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (deactivate()) {
m_jtimer.stop();
m_App.getAppUserView().exitApp();
}
}
}
Теперь можно инициализировать наш таймер:
m_jtimer = new
javax.swing.Timer(здесь_время_в_миллисекундах, new
TimerAction());
в метод activate разумеется, перед showView его и
вставляем.
Сразу скажу, чтобы задавать время
опционально, я вынес значение времени в
Ticket.Buttons и указываю его в секундах:
<timer value="10"/>
Изменим значение
здесь_время_в_миллисекундах на
panelticket.getTime()*1000
Ах, у вас нет panelticket? Так добавьте ее!)
this.panelticket = (JPanelTicket) panelticket;
а в JPanelTicket определим значение getTime
public int getTime() {
return Integer.parseInt(m_jbtnconfig.getProperty("timer", "0"));
}
Итак, теперь таймер будет выглядеть так:
m_jtimer = new javax.swing.Timer(panelticket.getTime()*1000, new TimerAction());
Ну, на совершенство кода я не претендую,
поэтому значение времени можно хранить и в
другом месте, мне так было удобнее сначала,
а теперь лень переделывать.
Ну теперь самое сложное:
Запускаем его
if (panelticket.getTime() > 0) {
m_jtimer.start();
}
Условие сделано для того, что если он нам
больше не понадобится по какой-то причине,
то установив значение времени в 0 он не
будет запускаться.
Если нужно, чтобы не для всех он работал, то
соответственно через условие, кому.
Расписывать не буду, ранее уже описывал в
Столах для Официантов.
Если мы выйдем из Map раньше времени, то
выхватим исключение, потому что Таймер
тикает в своем потоке, а объект, который ему
вызывать по окончанию, уже будет уничтожен.
Значит нужно расставить остановку таймера,
везде, где только мы выходим из объекта. Это
будут:
deactivate
setActivePlace
m_jbtnReservationsActionPerformed
Теперь если мы что-то делаем на Map'е, надо,
чтоб таймер не стопорился, поэтому мы будем
его снова запускать, как только куда-нибудь
будем нажимать
if (panelticket.getTime() > 0) {
m_jtimer.start();
}
Таймер просто будет обновлять регистр в
значение, заданное нами, и после последнего
нажатия будет всегда оставаться точно то
время, которое мы указывали.
Итак, добавляем:
viewTables
m_jbtnRefreshActionPerformed
Вроде больше некуда, если вдруг что
пропустил, сильно не пинайте, давно писал,
мог забыть уже.
Готово, можно проверять.
P.S. Андрей, если будете добавлять в
мейнстрим, то прошу данный пост удалить,
спасибо.
Original comment by masterum...@gmail.com
on 23 May 2012 at 2:26
Original issue reported on code.google.com by
dpeti...@gmail.com
on 26 Sep 2011 at 5:47