Я делаю проект в школе, и у меня есть функция отличия для реализации, но у меня есть некоторые проблемы. Что мне нужно сделать, так это то, что я должен проверить количество спальных мест, оставшихся в моей базе данных SQL, и если он будет ниже критического числа, появится JOptionPane.Остановка MouseMoved Event в Java
Что я пытаюсь сделать, это еще один сценарий, который является более жестким, 2 кадра открыты. Например, пользователь первого кадра использует кровать, он упадет до критического значения 10, на другом кадре, когда пользователь перемещает стрелку мыши, появляется сообщение JOptionPane, показывающее сообщение.
Я искал в этом сообществе, но я не могу реализовать коды, чтобы заставить его работать. Я дошел до того, что ошибок нет, но я не могу закрыть JOptionPane. В принципе, я бы хотел, чтобы это событие срабатывало только тогда, когда пользователь обоих фреймов опускался ниже слоя.
Я новичок в этом мероприятии. Я делаю этот проект как трехуровневое программирование с базой данных MySQL.
Я смотрел на этих сайтах, но безрезультатно:
How to temporarily disable event listeners in Swing?
Код для рамы, чтобы показать JOptionPane
public HomePageForm() {
setTitle("Home");
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setBounds(100, 100, 640, 428);
contentPane = new JPanel();
contentPane.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
String cardioMsg = "Beds are running out for Cardiothoracic Department!";
String oncoMsg = "Beds are running out for Oncology Department!";
String orthoMsg = "Beds are running out for Orthopaedic Department!";
String pediaMsg = "Beds are running out for Pediatric Department!";
if (ignoreMouseMovedEvents) {
return;
}
ArrayList<ChangeBed> bedList = new ArrayList<ChangeBed>();
ChangeBedControl cbc8 = new ChangeBedControl();
bedList = cbc8.processCountBedsAvailableDpt4();
for (int i = 0; i < bedList.size(); i++) {
bedsForPediatric = bedList.get(i).getRowCountAvail();
}
if (bedsForPediatric <= 3) {
int valuePedia = JOptionPane.showConfirmDialog(null, pediaMsg, "URGENT", JOptionPane.WARNING_MESSAGE);
if (valuePedia == 0 || valuePedia == 2) {
ignoreMouseMovedEvents = true;
valuePedia = JOptionPane.CLOSED_OPTION;
}
}
}
});
коды для контроллеров класса
public ArrayList<ChangeBed> processCountBedsAvailableDpt4() {
ChangeBed changeBed = new ChangeBed();
ArrayList<ChangeBed> bedList = new ArrayList<ChangeBed>();
bedList = changeBed.countBedsAvailableDpt4();
return bedList;
}
Entity класс для извлечения из БД SQL
public ArrayList<ChangeBed> countBedsAvailableDpt4() {
ArrayList<ChangeBed> bedList = new ArrayList<ChangeBed>();
boolean rowBooleanAvail;
int rowCountAvail;
try {
myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ooadp?useSSL=false", "root", "root");
Statement myStmt = myConn.createStatement();
ResultSet myRs = myStmt.executeQuery("SELECT count(*) FROM bed WHERE bedStatus = 'Available' AND department = 'Pediatric'");
while (myRs.next()) {
rowBooleanAvail = myRs.last();
rowCountAvail = myRs.getRow();
ChangeBed cb = new ChangeBed(myRs.getInt(rowCountAvail), "");
bedList.add(cb);
}
} catch (Exception e) {
e.printStackTrace();
}
return bedList;
}
В принципе я также Войти кадр, при входе в систему он открывает рамку, которую я показал в вышеуказанных кодов. Сначала показывает событие JOptionPane on Mousemoved, на котором отображается предупреждающее сообщение. Как только я нажму Ok/Cancel, он закрывает JOptionPane и останавливает событие mousemoved.
Если у меня есть другой логин, в котором я заходил на главную страницу (коды фрейма, показанные выше), тот же процесс будет повторяться, когда будет показана опция.
Итак, теперь у меня будет открыта 2 общедоступных страницы, и обе муссоменное событие деактивировано, и оно не будет срабатывать снова.
Для кадра 2, если бы я попал в критическое значение, чтобы показать JOptionPane, как только я перевешу мышь в первый ракурс домашней страницы - как я могу это сделать?
Несвязанный намек на качество кода: попробуйте не * пара * ваш пользовательский интерфейс для остальной части вашей программы. Значение: создавать классы/методы, которые обрабатывают ваши «данные»; и тогда ваш пользовательский интерфейс должен использовать эти классы/методы. Не ставьте десятки строк кода в один метод прослушивания. Это работает в течение дня, но когда вы вернетесь на следующей неделе, вы обнаружите, что такой код трудно читать, поддерживать, расширять ... – GhostCat
Хорошо, я понял. Я занимаюсь программированием на 3 уровня для моего проекта. Но просто надеюсь найти кого-то, кто мог бы помочь мне с моей проблемой. В основном закрытие JOptionPane и временное приостановление события mousemoved и знание того, как активировать событие. Спасибо, обратите внимание на будущее! @GhostCat – domster
1) См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/q/9554636/418556) 2) Для лучшей помощи раньше, отправьте сообщение [MCVE] или [Short, Самостоятельный, правильный пример] (http://www.sscce.org/). –