当前位置: 首页 > news >正文

javafx的ListView代入项目的使用

目录

1. 创建一个可观察的列表,用于存储ListView中的数据,这里的User是包装了用户的相关信息。

2.通过本人id获取friendid,及好友的id,然后用集合接送,更方便直观一点。

3.用for遍历集合,逐个添加。

4.渲染器(ImageCellFctoryFriendList)定制

5.渲染器具体方法如下:


1. 创建一个可观察的列表,用于存储ListView中的数据,这里的User是包装了用户的相关信息。

 // 创建一个可观察的列表,用于存储ListView中的数据ObservableList<User> friendList = FXCollections.observableArrayList();

记得把javafx的你需要使用的ListView命名

2.通过本人id获取friendid,及好友的id,然后用集合接送,更方便直观一点。

​List<User> ren = (List<User>) Connection.ois.readObject();//我的id,好友id及添加时间​

3.用for遍历集合,逐个添加。

for (User user : ren) {  

sitItems展示我添加的好友信息(项目中我只展示了好友的头像,昵称及在线状态)

​this.friendListview.setItems(this.friendList);this.friendList.add(person);​

最后,通过setCellFctory(渲染器)展示控件的每个单元格,并且它可以允许你为每个单元格提供一个定制的渲染器,这里我定制的渲染器为ImageCellFctoryFriendList(方法名自定义),为自定义函数,格式需要一样,但是内容可以自定义。

 this.friendListview.setCellFactory(new ImageCellFactoryFriendList());

4.渲染器(ImageCellFctoryFriendList)定制

具体代码在本文章的最后!!!

这里先获取需要的用户信息,然后进行展示,两个50分别为展示头像的长和宽。

 //更新单元格内容String username = listviewmember.name;//获取用户名String imagePath = listviewmember.image;//获取用户头像int online = listviewmember.online; // 获取用户在线状态//显示头像File imageFile = new File(imagePath);Image images = new Image(imageFile.toURI().toString());this.imageView.setFitWidth(50.0);this.imageView.setFitHeight(50.0);this.imageView.setImage(images);this.setGraphic(this.imageView);// 设置用户名setText(username);// 设置在线状态的颜色if (online==1) {setTextFill(Color.GREEN); // 在线状态为绿色setText(username + " (在线)");} else {setTextFill(Color.RED); // 不在线状态为红色setText(username + " (离线)");}this.setPrefHeight(-1.0);

设置右击菜单,这里右会出现两个按钮,

option1.setOnAction((event) -> {是设置点击按钮1,执行查看资料功能,内容可以直接设置。

注意:有几个按钮就需要添加几个进MenuItem。

          //设置右键菜单ContextMenu contextMenu = new ContextMenu();MenuItem option1 = new MenuItem("查看资料");MenuItem option2 = new MenuItem("删除好友");contextMenu.getItems().addAll(new MenuItem[]{option1,option2});this.setContextMenu(contextMenu);//查看资料option1.setOnAction((event) -> {

最后显示之前设置的MenuItem。

//设置鼠标点击事件,当右键点击时,显示上述创建的ContextMenuthis.setOnMouseClicked((event) -> {if (event.getButton() == MouseButton.SECONDARY) {contextMenu.show(this, event.getScreenX(), event.getScreenY());}});

具体效果如下:

5.渲染器具体方法如下:

其中User为用户信息,MarkTool类是为了方便客户端,服务端传递信息的。


public class ImageCellFactoryFriendList implements Callback<ListView<User>, ListCell<User>> {public ImageCellFactoryFriendList() {}public ListCell<User> call(ListView<User> param) {return new ListCell<User>() {private ImageView imageView = new ImageView();protected void updateItem(User listviewmember, boolean empty) {super.updateItem(listviewmember, empty);if (!empty && listviewmember != null) {//更新单元格内容String username = listviewmember.name;//获取用户名String imagePath = listviewmember.image;//获取用户头像int online = listviewmember.online; // 获取用户在线状态//显示头像File imageFile = new File(imagePath);Image images = new Image(imageFile.toURI().toString());this.imageView.setFitWidth(50.0);this.imageView.setFitHeight(50.0);this.imageView.setImage(images);this.setGraphic(this.imageView);// 设置用户名setText(username);// 设置在线状态的颜色if (online==1) {setTextFill(Color.GREEN); // 在线状态为绿色setText(username + " (在线)");} else {setTextFill(Color.RED); // 不在线状态为红色setText(username + " (离线)");}this.setPrefHeight(-1.0);//设置右键菜单ContextMenu contextMenu = new ContextMenu();MenuItem option1 = new MenuItem("查看资料");MenuItem option2 = new MenuItem("删除好友");contextMenu.getItems().addAll(new MenuItem[]{option1,option2});this.setContextMenu(contextMenu);//查看资料option1.setOnAction((event) -> {System.out.println("查看资料按钮!!");LookPersonalData.id = listviewmember.id;LookPersonalData.user=listviewmember;FriendPersonalData.user = listviewmember;//???URL url = this.getClass().getResource("LookPersonalData.fxml");if (url == null) {System.err.println("无法找到LookPersonalData.fxml资源文件");} else {Parent root = null;try {root = (Parent)FXMLLoader.load(url);} catch (IOException var7) {IOException e = var7;e.printStackTrace();return;}Stage stage = new Stage();stage.setTitle("个人界面");stage.initStyle(StageStyle.UTILITY);Scene scene = new Scene(root, 800.0, 640.0);stage.setScene(scene);stage.show();}});//删除好友option2.setOnAction((event) -> {System.out.println("删除好友按钮!!");try {String id = listviewmember.id;String friendid = listviewmember.friendid;User u = new User(id, friendid);String Operation = MarkTool.DeleteFriend;Connection.oos.writeObject(Operation);Connection.oos.writeObject(u);String response = Connection.ois.readObject().toString();System.out.println(response + "删除成功与否结果已收到");//103    yesif (response.equals(MarkTool.DeleteFriendfail)) {Alert alertxx = new Alert(Alert.AlertType.INFORMATION);alertxx.setTitle("错误");alertxx.setHeaderText((String)null);alertxx.setContentText("删除失败,看样子他不想失去你呢!");alertxx.showAndWait();}else {Alert alertx = new Alert(Alert.AlertType.INFORMATION);alertx.setTitle("正确");alertx.setHeaderText((String) null);alertx.setContentText("删除成功,减少一位损友!");alertx.showAndWait();}}  catch (IOException var15) {IOException exx = var15;throw new RuntimeException(exx);} catch (ClassNotFoundException var16) {ClassNotFoundException ex = var16;throw new RuntimeException(ex);}});//设置鼠标点击事件,当右键点击时,显示上述创建的ContextMenuthis.setOnMouseClicked((event) -> {if (event.getButton() == MouseButton.SECONDARY) {contextMenu.show(this, event.getScreenX(), event.getScreenY());}});} else {this.setText((String)null);this.setGraphic((Node)null);this.setPrefHeight(0.0);}}};}
}

相关文章:

javafx的ListView代入项目的使用

目录 1. 创建一个可观察的列表&#xff0c;用于存储ListView中的数据,这里的User是包装了用户的相关信息。 2.通过本人id获取friendid&#xff0c;及好友的id&#xff0c;然后用集合接送&#xff0c;更方便直观一点。 3.用for遍历集合&#xff0c;逐个添加。 4.渲染器&…...

基于ABAP OLE技术实现对服务器文件进行读写操作

使用ABAP中的OLE&#xff08;Object Linking and Embedding&#xff09;技术&#xff0c;可以实现对服务器文件的读写操作。以下是一个示例&#xff0c;演示如何通过ABAP代码使用OLE自动化对象来读写服务器上的文件。这里主要以Excel文件的读写操作为例。 1. 读Excel文件 代码…...

求教Postgresql在jdbc处理bit(1)字段的预处理解决方案

文章目录 1.建表语句&#xff1a;2.使用以下方式的预处理方式都报错了3.可以先用sql拼接实现功能 1.建表语句&#xff1a; CREATE TABLE public.h_user (id serial4 not null,username varchar(50) NULL,"password" varchar(64) NULL,nickname varchar(60) NULL,ema…...

微信小程序-自定义tabBar

通过官网给出的示例自己实现了自定义的tabBar&#xff0c;但结果发现 无法监听页面生命周期函数 结语&#xff1a;原想的是实现不一样的效果&#xff08;如下&#xff09; 故尝试了自定义tabBar&#xff0c;虽然做出来了&#xff0c;但也发现这个做法存在不足&#xff1a; 在…...

vue3+element-plus 实现动态菜单和动态路由的渲染

在 Vue.js 中&#xff0c;使用 Vue Router 管理路由数据&#xff0c;并将其用于渲染 el-menu&#xff08;Element UI 的菜单组件&#xff09;通常涉及以下几个步骤&#xff1a; 定义路由元数据&#xff1a; 在你的路由配置中&#xff0c;为每个路由项添加 meta 字段&#xff0c…...

GO-学习-03-基本数据类型

数据类型&#xff1a;基本数据类型和复合数据类型 基本数据类型&#xff1a;整型、浮点型、布尔型、字符串 复合数据类型&#xff1a;数组、切片、结构体、函数、map、通道&#xff08;channel&#xff09;、接口 整型&#xff1a; package main import "fmt" im…...

高并发场景下,系统的保护机制

伴随着分布式&#xff0c;微服务项目的快速发展。各个微服务的调用和通讯难免会出现依赖关系&#xff0c;如果上游服务在依赖下游服务的时候下游服务出现了故障从而导致下游服务的不可用&#xff0c;进一步导致了上游的服务被拖垮&#xff0c;就会发生服务雪崩&#xff0c;故障…...

服务器构建私有npm库(Docker + Verdaccio)

npm官网有时候因为网络原因包推不上去&#xff0c;那就简单构建个私有库 私有库不会被共享&#xff0c;且配置不需要太高1h2G就行 1.需要安装Docker&#xff0c;这个跳过了 2.生成配置文件 mkdir /home/verdaccio cd /home/verdaccio mkdir conf && mkdir storage &am…...

LabVIEW做二次开发时应该注意哪些方面?

在使用LabVIEW进行二次开发时&#xff0c;以下几个方面需要特别注意&#xff1a; 需求明确化&#xff1a; 确认并详细记录客户的需求&#xff0c;明确系统的功能、性能、可靠性等要求。制定详细的需求文档&#xff0c;并与客户反复确认&#xff0c;避免后期的需求变更和误解。 …...

docker配置上网代理获取镜像

一、添docker子配置档设置 1、创建目录 mkdir /etc/systemd/system/docker.service.d 2、创建http-proxy.conf文件,增加以下内容 cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF [Service] Environment“HTTP_PROXYhttp://192.168.0.2:8118…...

SqlSugar删除没有定义主键的实体类对应的数据库表数据

一般而言&#xff0c;使用SqlSugar的DbFirst功能创建数据库表实体类时&#xff0c;如果数据库表有主键&#xff0c;生成的实体类对应属性也会标识为主键&#xff0c;如下图所示。   但有时候生成的实体类没有自动配置主键&#xff0c;这时可以通过以下方式进行删除操作&…...

虚拟机复制后网络不可用,报错“network.service - LSB: Bring up/down networking”

查询IP地址&#xff0c;eth33 没有显示IP地址 尝试重启&#xff0c;有报错&#xff0c;并且有提示&#xff0c;按照提示执行下看看 解决办法 chkconfig NetworkManager offsystemctl disable NetworkManager.serviceservice NetworkManager stopservice network restart 之后检…...

Redis 7.x 系列【30】集群管理命令

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 集群信息2.1 CLUSTER INFO 3. 节点管理3.1 CLUSTER MYID3.2 CLUSTER NODES3…...

将YOLOv8模型从PyTorch的.pt格式转换为TensorRT的.engine格式

TensorRT是由NVIDIA开发的一款高级软件开发套件(SDK)&#xff0c;专为高速深度学习推理而设计。它非常适合目标检测等实时应用。该工具包可针对NVIDIA GPU优化深度学习模型&#xff0c;从而实现更快、更高效的运行。TensorRT模型经过TensorRT优化&#xff0c;包括层融合(layer …...

Hello SLAM(在Linux中实现第一个C++程序)

首先需要安装vim编辑器&#xff0c;输入命令 sudo apt install vim 在Ubuntu上安装好vim编辑器后&#xff0c;创建路径&#xff08;/home/slambook/ch2&#xff09;&#xff0c;在该路径下创建一个cpp文档&#xff08;touch hello.c&#xff09;&#xff0c;通过vim编辑器进行…...

IPD推行成功的核心要素(十五)项目管理提升IPD相关项目交付效率和用户体验

研发项目往往包含很多复杂的流程和具体的细节。因此&#xff0c;一套完整且标准的研发项目管理制度和流程对项目的推进至关重要。研发项目管理是成功推动创新和技术发展的关键因素。然而在实际管理中&#xff0c;研发项目管理常常面临着需求不确定、技术风险、人员素质、成本和…...

C++ 鼠标轨迹API【神诺科技SDK】

一.鼠标轨迹模拟简介 传统的鼠标轨迹模拟依赖于简单的数学模型&#xff0c;如直线或曲线路径。然而&#xff0c;这种方法难以捕捉到人类操作的复杂性和多样性。AI大模型的出现&#xff0c;使得神诺科技 能够通过深度学习技术&#xff0c;学习并模拟更自然的鼠标移动行为。 二.…...

设计模式|观察者模式

观察者模式是一种行为设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时&#xff0c;它的所有观察者都会收到通知并更新。观察者模式常用于实现事件处理系统、发布-订阅模式等。在项目中&#xff0c…...

python自动化运维 通过paramiko库和time库实现服务器自动化管理

目录 一.前言 二. 代码实现以及解析 2.1导入必要的库 2.2定义服务器信息 2.3创建 SSH 客户端连接函数 2.4执行远程命令函数 2.5获取系统信息函数 2.6重启服务函数 2.7 主函数 三.致谢 一.前言 在数字化时代&#xff0c;IT 基础设施的规模和复杂性不断增长&am…...

HTML常用的转义字符——怎么在网页中写“<div></div>”?

一、问题描述 如果需要在网页中写“<div></div>”怎么办呢&#xff1f; 使用转义字符 如果直接写“<div></div>”&#xff0c;编译器会把它翻译为块&#xff0c;类似的&#xff0c;其他的标签也是如此&#xff0c;所以如果要在网页中写类似于“<div…...

基于OpenAlex与效率工具的学术检索插件开发实战

1. 项目概述&#xff1a;一个为学术研究提速的智能助手 如果你是一名科研工作者、研究生&#xff0c;或者任何需要频繁查阅学术文献的人&#xff0c;那么你一定对“信息过载”和“检索低效”这两个词深有体会。在浩如烟海的学术数据库中&#xff0c;找到一个精准的答案、追踪一…...

【CentOS 7.6】打造现代化C/C++开发环境:Neovim配置、插件生态与智能补全实战

1. 环境准备与工具链搭建 在CentOS 7.6上构建现代化C/C开发环境&#xff0c;首先需要确保基础工具链的完整性。不同于桌面环境&#xff0c;服务器环境往往需要从源码编译安装最新版本的开发工具&#xff0c;这对系统兼容性和依赖管理提出了更高要求。 1.1 GCC编译器升级实战 Ce…...

发现开源神器:三步解锁卡车模拟器的智能驾驶新纪元

发现开源神器&#xff1a;三步解锁卡车模拟器的智能驾驶新纪元 【免费下载链接】Euro-Truck-Simulator-2-Lane-Assist Plugin based interface program for ETS2/ATS. 项目地址: https://gitcode.com/gh_mirrors/eur/Euro-Truck-Simulator-2-Lane-Assist 你是否曾梦想在…...

终极指南:10个必学Objective-C库助力iOS开发效率翻倍

终极指南&#xff1a;10个必学Objective-C库助力iOS开发效率翻倍 【免费下载链接】TimLiu-iOS iOS开发常用三方库、插件、知名博客等等 项目地址: https://gitcode.com/gh_mirrors/ti/TimLiu-iOS TimLiu-iOS是一个精心整理的iOS开发资源宝库&#xff0c;包含了Objective…...

AI编程助手技能化:开源agent-skills项目实战指南

1. 项目概述&#xff1a;为AI编程助手注入“专业技能包” 如果你和我一样&#xff0c;日常重度依赖 Claude Code、Cursor 这类 AI 编程助手来辅助开发和研究&#xff0c;那你肯定遇到过这样的场景&#xff1a;想让 AI 帮你深入理解一篇复杂的数学论文&#xff0c;或者验证一个…...

月薪2万+,2026年AI智能体工程师,这个岗位火了

AI智能体工程师负责设计、搭建、调优和维护AI智能体系统&#xff0c;让AI能自主感知环境、做出决策并执行动作。该岗位需求大&#xff0c;薪资高&#xff0c;适合具备逻辑拆解能力、Prompt工程能力和工具链认知的人。文章建议从体验AI智能体产品、学习相关课程和尝试搭建mini智…...

在Windows电脑上体验酷安社区:酷安UWP桌面版完全指南

在Windows电脑上体验酷安社区&#xff1a;酷安UWP桌面版完全指南 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP 你是否曾经想过&#xff0c;如果能在电脑上刷酷安会是怎样的体验&#xf…...

别再只用AES了!手把手教你用Java BouncyCastle库实现SM4国密加密(附完整工具类)

国密算法实战&#xff1a;用Java BouncyCastle实现SM4加密的完整指南 在数据安全领域&#xff0c;国际通用算法长期占据主导地位&#xff0c;但随着技术自主可控需求的提升&#xff0c;国产密码算法正成为企业级应用的新选择。SM4作为我国商用密码标准体系中的重要对称加密算法…...

VidToText

链接&#xff1a;https://pan.quark.cn/s/370e0f7f3f42vidToText 离线语音转文字 工具&#xff0c;绝对能帮你解放双手&#xff0c;自带模型不用联网&#xff0c;95% 高准确率&#xff0c;音视频秒转文字&#xff0c;办公和创作效率直接翻倍&#xff01;且这款软件免费使用&…...

中国词元与世界AI元语:模力方舟和口袋龙虾的协同进化

在AI产业从技术突破转向生态竞争的今天&#xff0c;一个核心命题日益凸显&#xff1a;如何让顶尖的AI能力跨越技术鸿沟&#xff0c;真正触达每一个开发者与终端用户&#xff1f;开源中国以“模力方舟”与“口袋龙虾”为双核驱动&#xff0c;构建了一条从底层资源聚合到上层应用…...