Registrierung eines Propertychangelistener

nieselfriem

Bekanntes Mitglied
HAllo!

Ich habe folgendes Problem.

In meiner GUI werden die Daten aus eienr Datenbank geladen, sobald aus einer ComboBox der entsprechende Eintrag ausgewählt worden ist. Das bedeutet die vorhandenen ComBoxBoxen, textfelder und hier speziell die Komponente JDateChooser. ich möchte einen Savebutton erst aktivieren, wenn die Daten nach dem sie geladen worden sind durch den Nutzer verändert werden. Bei den Standartkomponenten funktioniert das alles prima. Aber beim JDateChooser nicht.

bisher habe ich foldendes gemacht:

Java:
 gebDatJDC.addPropertyChangeListener(new PropertyChangeListener() {

            public void propertyChange(PropertyChangeEvent propertyChangeEvent) {
                updateCounter=0;
                String property = propertyChangeEvent.getPropertyName();
                String dateValue= String.valueOf(propertyChangeEvent.getNewValue());
                String oldvalue = String.valueOf(propertyChangeEvent.getOldValue());
                System.out.println("Property:" + property);
               //if (gebDatJDC.getDate().equals(propertyChangeEvent.getNewValue()))
               jQuickSaveBT.setEnabled(true);
              
        });

Wenn ich nun den Listener im Kontruktor registriere und ein Datum vorhanden ist, wird der Button sofort aktiv. Er sollte jedoch erst aktiv werden wenn ich als Nutzer das Datum ändere. Ist noch kein Datum vorhanden, dann klappt alles Prima.

Der JDatechooser erbt von JPanel und implementiert den ActionListener und PropertyChangeListener

Hat jemand noch eine Idee, wie ich die Änderung die durch den Nutzer gemacht wird abfragen kann?

Gruß
 
Wäre nicht schlecht wenn du dazu schreiben würdest von welchem JDateChooser du sprichst 😀
com.toedter.calendar.JDateChooser ?
Was liefert dir denn getPropertyName() in beiden Fällen?
Ansonsten ist
Java:
//if (gebDatJDC.getDate().equals(propertyChangeEvent.getNewValue()))
Denke ich mal schon fast der richtige Weg, was genau liefert denn der Vergleich (bzw was liefert getDate und getNewValue?)
 
Jupp! Genau um den handelt es sich.

Ich habe mal ein wenig herum experimentiert und habe folgendes Problem erörtert.
Ich habe mal mit den Methoden getNewValue, getOldValue und getDate gearbeitet und bin dabei auf folgendes Problem gestoßen.
Zum veranschaulichen habe ich mal eine Art Tabelle gemacht
* Es ist ein Datum durch Daten aus der Datenbank und Auswahl des Datensatzes in JDateChooser einegetragen worden. Oder ist ist kein Datum in der Datenbank hinterlegt und der JDateChooser ist leer.

** Der Benutzer hat die Daten durch eine Datumsauswahl im JDateChooser verändert. Oder es ist der Zustand direkt nach dem Auswahl des Datensatzes
Code:
                          Es ist ein Datum eingetragen* (1)  es ist kein Datum eingetragen*(2)
Nutzeränderung**          Änderung der Daten durch User     Änderung der Daten durch User
                           getNewValue: DatumNeu               getNewValue: DatumNeu
                           getOldValue: DatumAlt               getOldValue: null
                           getDate: DatumNeu                   getDate:Datumneu


DatenLaden**       Änderung der Daten durch User (3)     Änderung der Daten durch User (4)
                           getNewValue: DatumAlt                 getNewValue: null
                           getOldValue: null                     getOldValue: null
                           getDate: DatumAlt                     getDate:null

Dabei ergibt sich das Problem, dass man über die drei Methoden nicht die Zustände 2 und 3 auseinander halten kann um eine richtige Untescheidung zu treffen, wann der SaveButten aktiviert werden soll. Denn der Button soll nur in den beiden oberen Bedingungen aktiviert werden, also wenn der User eine Veränderung auslöst. Bisher habe ich noch keine weitere Idee. Ein weiterer Denkanstoß wäre toll.

Gruß niesel
 

Zurück
Oben