Hi Tom,

Did this issue ever get resolved? It sounds very strange indeed, and we should 
have a JIRA filed for it if there is not one already.

Thanks
Richard

On Apr 8, 2013, at 3:48 AM, Tom Eugelink <t...@tbee.org> wrote:

> 
> Hi Werner,
> 
> It indeed is very similar (my code is public on Github, so no use adding it 
> here), especially the selectedToggleProperty listener. I chose to reuse as 
> much of the existing approach, being the getUserData().
> 
> What would be of interest to me is:
> - the exact declaration of the enumValueProperty
> - how you listen to changes on enumValueProperty
> - and of course: what happens if you hide/disable the toggles with only one 
> listener attached
> 
> Tom
> 
> 
> On 2013-04-08 11:51, Werner Lehmann wrote:
>> Hi Tom,
>> 
>> I did something similar: toggle group for toggles which correspond to enum 
>> members. This one assume that the toggles correspond to the enum members in 
>> their declared order. It also uses an invalidation listener and 
>> disabling/enabling a toggle keeps the listener functional as I just tested 
>> with a test application.
>> 
>> public class MintEnumToggleGroup<E extends Enum<E>> extends ToggleGroup
>> {
>>  public MintEnumToggleGroup(Class<E> enumClass)
>>  {
>>    this.enumClass = enumClass;
>> 
>>    selectedToggleProperty().addListener(new InvalidationListener()
>>    {
>>      @Override
>>      public void invalidated(Observable observable)
>>      {
>>        Toggle toggle = getSelectedToggle();
>>        E value = null;
>>        if (toggle != null)
>>        {
>>          int ordinal =
>>            MintEnumToggleGroup.this.getToggles().indexOf(toggle);
>>          value = MintEnumToggleGroup.this.enumClass
>>            .getEnumConstants()[ordinal];
>>        }
>>        if (enumValue.get() != value)
>>          enumValue.set(value);
>>      }
>>    });
>> 
>>    ...
>>  }
>> 
>>  /**
>>   * Bidirectionally bindable property representing the enum member
>>   * of the selected toggle.
>>   */
>>  public ObjectProperty<E> enumValueProperty() { return enumValue; }
>>  public E getEnumValue() { return enumValueProperty().get(); }
>>  public void setEnumValue(E value) { enumValueProperty().set(value); }
>> }
>> 
>> 
>> Looks similar to what you are doing. Let me know if you want to look at the 
>> full source (toggle group and testcase).
>> 
>> Rgds
>> Werner
>> 
>> On 07.04.2013 21:28, Tom Eugelink wrote:
>>> 
>>> Again some strange behavior I could use some pointers with. In JFXtras I've 
>>> created an extended ToggleGroup which has a value property.
>>> https://github.com/JFXtras/jfxtras-labs/blob/2.2/src/main/java/jfxtras/labs/scene/control/ToggleGroupValue.java
>>> 
>>> Basically what it does is listen to the selectedToggleProperty of 
>>> ToggleGroup, and upon invalidation gets the user data associated with the 
>>> now active toggle and puts that in the valueProperty. Simple, and now you 
>>> can register and listen to the value of the toggle group. Which is exactly 
>>> what I do in my basketball application by registering to the invalidated 
>>> event.
>>>      toggleGroup.valueProperty().addListener(new InvalidationListener() 
>>> {...});
>>> 
>>> Now I have one very strange behavior; if I disable or hide the toggles, and 
>>> then re-enable/show them again, the invalidation listener is no longer 
>>> called. Some how it seems to have been removed from the listeners list. But 
>>> the API documentation explicitly says it is a strong reference.
>>> http://docs.oracle.com/javafx/2/api/javafx/beans/Observable.html#addListener(javafx.beans.InvalidationListener)
>>> 
>>> If I add a second dummy listener, then the first listener is not removed 
>>> when disabled/hidden.
>>> 
>>> It very much reeks like a garbage collection thing. Any suggestions?
>>> 
>>> Tom
> 
> 

Reply via email to