JavaFX 集合的 ObservableList 和 ObservableMap

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

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

相关文章