Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Wenn sie true ist soll der speichern button disabled sein. Bei false entsprechend.
Die Frage ist nur ob ich der Variable sowas wie einen actionListener verpassen kann, der bei jedem ändern ausgelöst wird oder muss ich das beim ändern immer mit angeben, dass der Button en/disabled wird?
Die Variable ist nicht in deinem Programm, sondern in deinem Computer! :meld: :wink:
Es weiß natürlich niemand, worum es geht (außer: "Irgendwas mit 'speichern'"...). Aber falls es um irgendwas geht, was im Model-View-Controller-Pattern implementiert ist, dann wäre die Eigenschaft "saved" ja ein Teil des Modells - und das würde dann seine Listener (oder Observer) benachrichtigen.
Was du beschrieben hast ist ja ganz grob(!) EINER der (vielen) Gründe, warum man Fields immer private und nur über setter/getter zugänglich macht. (Und wenn du jetzt sagst, dass diese Variable private IST, aber innerhalb der Klasse geändert wird: Genau deswegen habe ich mal postuliert, dass es einen access-modifier geben müßte, der stärker ist als private - nämich so stark, dass die Variable NUR in EINER Methode (nämlich genau der set-Methode) geändert werden darf). Jedes mal, wenn sich der Wert der Variablen ändert, muss zusätzlich was passieren.
Langer Rede kurzer Code
Code:
class Model
{
private boolean saved = false;
private List listener = ...
public void setSaved(boolean savedState)
{
if (this.saved != savedState)
{
this.saved = savedState;
for (Listener listener : listeners)
{
listener.daHatSichWasGeändert(new EventFallsNötig());
}
}
}
public boolean isSaved()
{
return saved;
}
}
class View implements Listener
{
JButton button = ...
Model model = ....
public void daHatSichWasGeändert(EventFallsNötig event)
{
button.setEnabled(!model.isSaved());
}
}
Schade dass ich nicht selber drauf gekommen bin :? :wink:
Werde es so lösen wie du gesagt hast du auch innerhalb der Klasse auf das Feld über die getter/setter zugreifen und und des rest des Codes in den setter rein schreiben.