Binds the specified ToggleGroup to the specified ObjectProperty (this feature is missing in JavaFX). - Java JavaFX

Java examples for JavaFX:Bindable Properties

Description

Binds the specified ToggleGroup to the specified ObjectProperty (this feature is missing in JavaFX).

Demo Code



//package com.java2s;
import javafx.beans.property.ObjectProperty;
import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleGroup;

public class Main {
  /**//from  w w  w . j  a  va 2  s.co m
   * Binds the specified ToggleGroup to the specified ObjectProperty (this feature
   * is missing in JavaFX). This binding is not fully bidirectional. The initial
   * selection of the ToggleGroup will be taken from the current value of the
   * ObjectProperty. Whenever the ToogleGroup selection changes (user input), the
   * ObjectProperty will have the value of the selected Toggle. Changes to the
   * ObjectProperty value will not be transferred to the current Toggle
   * selection.<br/>
   * All Toggle controls of the ToogleGroup must define an userData object which
   * is a potential value of the bound ObjectProperty.<br/>
   * This method is helpful for binding ToggleButton or RadioButton groups to
   * appropriate view model properties.
   *
   * @param toggleGroup
   *          the toggle group to be bound
   * @param property
   *          the object property to be bound
   * @param <T>
   *          type of the object property to be bound
   */
  public static <T> void bindToggleGroupToProperty(final ToggleGroup toggleGroup, final ObjectProperty<T> property) {

    // check all toggles for required user data
    toggleGroup.getToggles().forEach(toggle -> {
      if (toggle.getUserData() == null) {
        throw new IllegalArgumentException("The ToggleGroup contains at least one Toggle without user data!");
      }
    });

    // select initial toggle for current property state
    for (Toggle toggle : toggleGroup.getToggles()) {
      if (property.getValue() != null && property.getValue().equals(toggle.getUserData())) {
        toggleGroup.selectToggle(toggle);
        break;
      }
    }

    // update property value on toggle selection changes
    toggleGroup.selectedToggleProperty().addListener((observable, oldValue, newValue) -> {
      property.setValue((T) newValue.getUserData());
    });
  }
}

Related Tutorials