首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BitSet的JavaFX属性

BitSet的JavaFX属性
EN

Stack Overflow用户
提问于 2015-07-24 05:18:22
回答 1查看 170关注 0票数 0

我需要一个用于BitSet的JavaFX Property,以便为BitSet中的每个位创建一个具有切换按钮的TableColumn。我已经实现了Property<BitSet>,但即使有了oracle文档,一些接口方法的含义和用法仍然让我摸不着头脑,因为对我来说,这一切看起来都是多余的样板。请告诉我,我是否在实现的正确轨道上,以及我可以改进的地方。我还没有实现绑定,因为我不希望在我的用例中需要它们。

代码语言:javascript
复制
import java.util.*;
import javafx.beans.InvalidationListener;
import javafx.beans.property.Property;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;

public class BitSetProperty implements Property<BitSet>
{
    private BitSet  value;
    private final Set<ChangeListener<? super BitSet>> changeListeners = new HashSet<>();
    private final Set<InvalidationListener> invalidationListeners = new HashSet<>();

    @Override public Object getBean() {return value;}

    @Override public String getName() {return "what shall I return here?";}

    @Override public void addListener(ChangeListener<? super BitSet> listener) {changeListeners.add(listener);}

    @Override public void removeListener(ChangeListener<? super BitSet> listener) {changeListeners.remove(listener);}

    @Override public BitSet getValue()
    {
        return (BitSet)value.clone();
    }

    @Override public void addListener(InvalidationListener listener) {invalidationListeners.add(listener);}
    @Override public void removeListener(InvalidationListener listener) {invalidationListeners.remove(listener);}

    @Override public void setValue(BitSet value)
    {
        if(!value.equals(this.value))
        {
            changeListeners.stream().forEach(cl->cl.changed(this, this.value, (BitSet)value.clone()));
            invalidationListeners.stream().forEach(il->il.invalidated(this));
        }
        this.value=value;
    }

    @Override public void bind(ObservableValue<? extends BitSet> observable)
    {
        throw new UnsupportedOperationException();
    }

    @Override public void unbind()
    {
        throw new UnsupportedOperationException();
    }

    @Override public boolean isBound()
    {
        // TODO Auto-generated method stub
        return false;
    }

    @Override public void bindBidirectional(Property<BitSet> other)
    {
        throw new UnsupportedOperationException();
    }

    @Override public void unbindBidirectional(Property<BitSet> other)
    {
        throw new UnsupportedOperationException();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-09-07 20:10:59

回答我自己的问题时,我误解了属性是如何工作的。我认为它们会在内部状态改变时触发更改事件,但我现在知道它们将内容视为黑盒(我猜假设内容是不可变的),并在内容被替换时触发,这是一个容易得多的问题。然后,我的问题可以使用以下命令来解决:

代码语言:javascript
复制
ObjectProperty<BitSet> property = new SimpleObjectProperty<>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31598191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档