JavaFX 集合的 ObservableList 和 ObservableMap
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
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