使用javafx SimpleMapProperty时出现UnsupportedOperationException

men*_*ics 5 java javafx-2

为什么以下代码抛出UnsupportedOperationException?

import javafx.beans.property.MapProperty;
import javafx.beans.property.SimpleMapProperty;


public class TestMapProperty {
    static MapProperty<String, String> model = new SimpleMapProperty<String, String>();


    public static void main(String[] args) {
        model.put("blue", "green"); // exception thrown here
    }
}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractMap.put(AbstractMap.java:203)
    at javafx.beans.binding.MapExpression.put(MapExpression.java:277)
    at TestMapProperty.main(TestMapProperty.java:10)
Run Code Online (Sandbox Code Playgroud)

aw-*_*ink 6

Pace的答案仍然有效,但是如果您想要一个Property而不仅是ObservableMap,那么这不是正确的代码。

static MapProperty<String, String> model = new SimpleMapProperty<String, String>(FXCollections.observableHashMap());
Run Code Online (Sandbox Code Playgroud)

会更适合。您仍然必须使用新的ObservableMap实例初始化SimpleMapProperty。没有SimpleMapProperty初始Map的构造函数不会为您创建一个。这是因为您可以选择自己的ObservableMap实现来支持Property。


Pac*_*ace 3

如果您确实想创建可观察地图的实例,您应该使用

ObservableMap<String,String> model = FXCollections.observableHashMap();
Run Code Online (Sandbox Code Playgroud)