Ich mache ein Projekt in der Schule und ich habe eine Besonderheit zu implementieren, aber einige Probleme haben. Was ich tun muss ist, dass ich die Anzahl der Betten in meiner SQL-Datenbank überprüfen muss und wenn es unter eine kritische Zahl fällt, erscheint ein JOptionPane.Stoppen MouseMoved Ereignis in Java
Was ich versuche, ist ein anderes Szenario, das härter ist, 2 Frames geöffnet. Wenn der erste Frame-Benutzer das Bett verwendet, wird er auf den kritischen Wert 10 fallen, während der andere Rahmen, wenn der Benutzer seinen Mauspfeil bewegt, das JOptionPane mit einer Nachricht öffnet.
Ich habe in dieser Community nachgeschlagen, aber ich kann nicht scheinen, die Codes zu implementieren, damit es funktioniert. Ich habe einen Punkt erreicht, an dem es keine Fehler gibt, aber ich kann das JOptionPane nicht schließen. Grundsätzlich möchte ich nur, dass dieses Ereignis nur dann ausgelöst wird, wenn der Benutzer eines der Frames unter die Bettenanzahl fällt.
Ich bin brandneu zu diesem Actionevent. Ich mache dieses Projekt als 3-Tier-Programmierung mit MySQL-Datenbank.
Ich habe an diesen Stellen gesucht, aber ohne Erfolg:
How to temporarily disable event listeners in Swing?
-Code für den Rahmen der JOptionPane für Controller Klasse
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;
}
}
}
});
Codes zeigen
public ArrayList<ChangeBed> processCountBedsAvailableDpt4() {
ChangeBed changeBed = new ChangeBed();
ArrayList<ChangeBed> bedList = new ArrayList<ChangeBed>();
bedList = changeBed.countBedsAvailableDpt4();
return bedList;
}
Entity Klasse von SQL DB
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;
}
Grundsätzlich abrufen Ich habe auch einen Login-Rahmen, beim Einloggen in den Rahmen eröffnet ich in den obigen Codes gezeigt haben. Zuerst zeigt ein JOptionPane bei Mousemoved-Ereignis eine Warnmeldung an. Sobald ich auf Ok/Abbrechen klicke, wird das JOptionPane geschlossen und das mousemoved-Ereignis gestoppt.
Wenn ich einen anderen Login-Rahmen habe, mit dem ich mich auf der Homepage anmelde (Codes des oben gezeigten Rahmens), wird der gleiche Vorgang wiederholt, wobei eine Optionspaneel angezeigt wird.
So jetzt habe ich 2 Homepages geöffnet und beide Mausbewegung deaktiviert und es wird nicht erneut ausgelöst.
Für Frame 2, wenn ich den kritischen Wert treffen sollte, um das JOptionPane zu zeigen, sobald ich die Maus im ersten Startrahmen bewege - wie kann ich das machen?
Unerreichter Hinweis auf Code-Qualität: versuchen Sie nicht, * Ihre * UI mit dem Rest Ihres Programms * zu koppeln. Bedeutung: Erstellen Sie Klassen/Methoden, die mit Ihren "Daten" umgehen; und dann sollte Ihre Benutzeroberfläche diese Klassen/Methoden verwenden. Fügen Sie keine Dutzend Codezeilen in einzelne Listener-Methoden ein. Das funktioniert für einen Tag, aber wenn Sie nächste Woche wiederkommen, werden Sie feststellen, dass solcher Code schwer zu lesen, zu warten, zu erweitern ist ... – GhostCat
Okay, ich habe es .. Ich mache 3-Tier-Programmierung für mein Projekt. Aber nur hoffen, jemanden zu finden, der mir bei meinem Problem helfen könnte. Grundsätzlich das JOptionPane zu schließen und das mousevoved-Ereignis vorübergehend zu stoppen und zu wissen, wie man das Event wieder aktiviert. Danke wird es in Zukunft merken! @GhostCat – domster
1) Siehe [Die Verwendung mehrerer JFrames, gute/schlechte Praxis?] (Http://StackOverflow.com/q/9554636/418556) 2) Für bessere Hilfe früher, post ein [MCVE] oder [Short, Selbstenthaltenes, korrektes Beispiel] (http://www.sscce.org/). –