JavaFX 集合的 ObservableList 和 ObservableMap

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前, 星球 内第2个项目《仿小红书(微服务架构)》正在更新中。第1个项目:全栈前后端分离博客项目已经完结,演示地址:http://116.62.199.48/。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 255 小节,累计 39w+ 字,讲解图:1716 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1300+ 小伙伴加入,欢迎点击围观

JavaFX 中的集合由 javafx.collections 包定义,它由以下接口和类组成:

接口:

  • ObservableList:一个列表,使侦听器能够在更改发生时对其进行跟踪

  • ListChangeListener:接收 ObservableList 更改通知的接口

  • ObservableMap:使观察者能够在变化发生时跟踪变化的地图

  • MapChangeListener:接收 ObservableMap 更改通知的接口


班级:

  • FXCollections:一个由静态方法组成的实用程序类,这些静态方法是 java.util.Collections 方法的一对一副本

  • ListChangeListener.Change:表示对 ObservableList 所做的更改

  • MapChangeListener.Change:表示对 ObservableMap 所做的更改


ObservableList 的例子

这里首先创建了一个标准列表。然后用 ObservableList 包裹它。然后注册一个 ListChangeListener,每当 ObservableList 发生变化时都会收到通知:

packageorg.attune.collection;

导入java.util.List;

importjava.util.ArrayList;

importjavafx.collections.ObservableList;

importjavafx.collections.ListChangeListener;

importjavafx.collections.FXCollections;

公共类 ObservableListDemo {

public static void main(String[] args)

{

List<String> list = new ArrayList<String>();


ObservableList<String>observableList = FXCollections.observableList(列表);


observableList.addListener(new ListChangeListener() {

@覆盖

public void onChanged(ListChangeListener.Change change) {

System.out.println("检测到变化!");

while (change.next()) {

System.out.println("添加了吗?" + change.wasAdded());

System.out.println("被删除了吗?" + change.wasRemoved());

}

}

});




observableList.add("a : item one");

System.out.println("大小:" + observableList.size()+observableList.toString());


list.add("d: item two");

System.out.println("大小:" + observableList.size()+observableList.toString());

observableList.add("f : 项目三");

System.out.println("大小:" + observableList.size()+observableList.toString());


list.add("b:第四项");

System.out.println("大小:" + observableList.size()+observableList.toString());


observableList.remove(1);

System.out.println("大小:" + observableList.size()+observableList.toString());


observableList.sort(null);

System.out.println("大小:" + observableList.size()+observableList.toString());


observableList.set(2, "c : 项目五");

System.out.println("大小:" + observableList.size()+observableList.toString());

}

}



这是上面程序的输出:

检测到变化!

加入?真的

去掉了?错误的

尺寸:1[a : item one]

尺寸:2[a:第一项,d:第二项]

检测到变化!

加入?真的

去掉了?错误的

尺寸:3[a:第一项,d:第二项,f:第三项]

尺寸:4[a:第一项,d:第二项,f:第三项,b:第四项]

检测到变化!

加入?错误的

去掉了?真的

尺寸:3[a:第一项,f:第三项,b:第四项]

检测到变化!

加入?错误的

去掉了?错误的

尺寸:3[a:第一项,b:第四项,f:第三项]

检测到变化!

加入?真的

去掉了?真的

尺寸:3[a:第一项,b:第四项,c:第五项]


ObservableMap 的例子

包 org.attune.collection;
导入 java.util.Map;
导入 java.util.HashMap;
导入 javafx.collections.ObservableMap;
导入 javafx.collections.MapChangeListener;
导入 javafx.collections.FXCollections;

公共类 ObservableMapDemo {

public static void main(String[] args) {

Map<String,String> map = new HashMap<String,String>();

ObservableMap<String,String> observableMap = FXCollections.observableMap(map);
observableMap.addListener(new MapChangeListener() {
@覆盖
public void onChanged(MapChangeListener.Change change) {
System.out.println("检测到变化!");
}
});

// 将报告对 observableMap 的更改。
observableMap.put("key 1","value 1");
System.out.println("大小: "+observableMap.size() + observableMap.toString());

// 不会报告基础地图的更改。
map.put("键 2","值 2");
System.out.println("大小:"+observableMap.size()+ observableMap.toString());
// 将报告对 observableMap 的更改。
observableMap.remove("key 1");
System.out.println("大小: "+observableMap.size() + observableMap.toString());
}
}

这是输出:
检测到变化!
大小:1{key 1=value 1}
大小:2{键2=值2,键1=值1}
检测到变化!
大小:1{key 2=value 2}


请继续关注更多教育内容 Attune World Wide