[JavaFX] Wie kann man eine CheckBox in mehreren FXML-Dateien synchronisieren?

1 Antwort

Beide Views sollten auf dasselbe Model-Objekt zurückgreifen. Dieses hält ein Property, welches du im Controller an deine Checkboxen bindest.

Also ungefähr so:

public class YourModel {
  private final BooleanProperty activated = new SimpleBooleanProperty(false);

  public BooleanProperty activatedProperty() {
    return activated;
  }

  public final boolean isActivated() {
    return activatedProperty().get();
  }

  public final void setActivated(boolean activated) {
    activatedProperty().set(activated);
  }
}

Controller:

public class YourController {
  @FXML
  private CheckBox yourCheckbox;

  private final YourModel model;

  public Controller(YourModel model) {
    this.model = model;
  }

  @FXML
  private void initialize() {
    yourCheckbox
      .selectedProperty()
      .bindBidirectional(model.activatedProperty());
  }
}

Den Controller würde man für diesen Fall manuell anlegen und dann für das View setzen.

var model = new YourModel();

var loader = new FXMLLoader(getClass().getResource("1.fxml"));
var controller = new YourController(model);
loader.setController(controller);

// do the same for 2.fxml ...

Oder man verwendet einen Standardkonstruktor und übergibt das Model stattdessen über eine Setter-Methode.

verreisterNutzer  31.01.2022, 13:17

Ich denke, dass das einen weitaus größeren Aufwand machen würde, wenn ich für fast 20 Elemente sowas anwenden würde.

Ich habe mich doch dazu entschlossen, einfach den Text von den Labels, RadioButtons und und und zu ändern. Dies braucht vielleicht weniger Code oder nimmt sich nichts, aber es verbraucht definitiv weniger Speicherplatz und (auch wenn es nur sehr gering ist) weniger Rechenleistung.

Oder ich habe es falsch verstanden 🤔

0
regex9  31.01.2022, 14:33
@verreisterNutzer

Nun, du hast wie gesagt ein einziges Model-Objekt, welches sich von mehreren Controllern und Views geteilt werden kann. Viel Code ist das eigentlich nicht.

0