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);}}};}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js中自定义Markdown插件实现References解析

在现代Web应用程序中&#xff0c;Markdown已经成为一种流行的轻量级标记语言&#xff0c;它允许开发者以简单的文本格式编写文档&#xff0c;然后转换成HTML。Vue.js应用程序中经常需要将Markdown内容渲染到页面上。 为了实现这一点&#xff0c;我们可以使用Markdown解析器&am…

文件包涵条件竞争(ctfshow82)

Web82 利用 session.upload_progress 包含文件漏洞 <!DOCTYPE html> <html> <body> <form action"https://09558c1b-9569-4abd-bf78-86c4a6cb6608.challenge.ctf.show//" method"POST" enctype"multipart/form-data"> …

记录转换接口返回的JSON树形结构

一、前言 调用第三方接口返回JSON树形结构 String json "{\n" " \"code\": \"1\",\n" " \"msg\": \"成功\",\n" " \"sub_code\": \"\",\n" " \&quo…

grafana对接zabbix数据展示

目录 1、初始化、安装grafana 2、浏览器访问 3、安装zabbix 4、zabbix数据对接grafana 5、如何导入模板&#xff1f; ① 设置键值 ② 在zabbix web端完成自定义监控项 ③ garafana里添加nginx上面的的三个监控项 6、如何自定义监控项&#xff1f; 以下实验沿用上一篇z…

【React学习打卡第三天】

Redux快速上手、三个核心概念、React组件使用、修改store的数据、提交action传参、异步操作、Redux调试 一、Redux快速上手1.概念2.快速体验(纯redux计数案例&#xff09; 3.三个核心概念 二、Redux与React-环境准备1.配套工具2.配置基础环境3.store目录结构设计![在这里插入图…

SpringMvc有几个上下文

你好&#xff0c;我是柳岸花明。 SpringMVC作为Spring框架的重要组成部分&#xff0c;其启动流程和父子容器机制是理解整个框架运行机制的关键。本文将通过一系列详细的流程图&#xff0c;深入剖析SpringMVC的启动原理与父子容器的源码结构。 SpringMVC 父子容器 父容器的创建 …

Leetcode700.二叉搜索树中搜索具体值

二叉搜索树的定义&#xff1a; 一颗空树或者具有以下性质的二叉树&#xff1a; 若任意节点的左子树不空&#xff0c;则左子树上所有节点的值均小于它的根节点的值&#xff1b;若任意节点的右子树不空&#xff0c;则右子树上所有节点的值均大于它的根节点的值&#xff1b;任意节…

Perl文件系统过滤:数据筛选的艺术

Perl文件系统过滤&#xff1a;数据筛选的艺术 在Perl编程中&#xff0c;文件系统过滤是一种强大的技术&#xff0c;它允许开发者根据特定的规则对文件和目录进行筛选。通过文件系统过滤&#xff0c;可以轻松实现文件搜索、数据提取和自动化任务。本文将详细介绍Perl中的文件系…

数据结构初阶(c语言)-双向链表

这里首先纠正上篇文章一个错误&#xff0c;链表的一个有效数据点应该称为结点而不是节点。 一&#xff0c;双向链表的概念与结构 1.1概念与结构示意图 我们所说的双向链表全称为带头双向循环链表&#xff0c;也就是说此链表带有哨兵位结点(不存放任何数据的结点&#xff0c;且…

c++ 学习笔记之多线程:线程锁,条件变量,唤醒指定线程

基于CAS线程加锁方式 CAS&#xff08;Compare-And-Swap&#xff09;和 mutex 都是用于实现线程安全的技术&#xff0c;但它们适用于不同的场景&#xff0c;具有不同的性能和复杂性。下面是对两者的区别和使用场景的详细解释&#xff1a; CAS&#xff08;Compare-And-Swap&…

【Git多人协作开发】知识点总结

目录 知识点总结 1.创建dev分支开发 1.1在本地创建 1.1在远程创建&#xff08;推荐&#xff09; 2.远程分支和本地分支建立连接☞pull和push操作 2.1情况1 2.2情况2 2.3情况3 3.本地仓库对远程仓库的拉取pull操作 3.1情况1 3.2情况2 4.将开发分支的内容合并到远程m…

【Week-G5】适用于图像翻译的pix2pix模型-Pytorch版本

文章目录 1、基础知识1.1 图像翻译1.2 CGAN1.3 U-Net1.4 Pix2Pix 2、运行代码 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 本次主要学习Pix2Pix网络&#xff0c;常用于图像翻译&#…

CVE-2020-7248 OpenWRT libubox标记二进制数据序列化漏洞(更新中)

提要 该文档会一直处于更新当中&#xff0c;当状态为完毕后&#xff0c;才是更新完成。由于网络上关于该漏洞原理的分析文档和资源实在是太少&#xff0c;而本人关于该方向也才是刚入门&#xff0c;能力有限&#xff0c;所以复现需要的时间较长&#xff0c;需要补充和学习的东西…

用Manim实现【多边形】类的实现——[上]

用Manim实现【多边形】类的实现——[上] Polygram内容是关于不同几何图形的分类&#xff0c;特别是涉及多边形&#xff08;Polygon&#xff09;及其扩展形式&#xff0c;比如多图形&#xff08;Polygram&#xff09;。在manim中有10中特征&#xff0c;接下来5种类及其特征的解…

错误代码-130 proxy_connection_failed的解法

fiddler连接手机抓包时&#xff0c;下载证书遇到的报错 解决方法&#xff1a;关闭手机的代理服务器就可以了

Python while编程题|Python一对一辅导练习题目

逐步逼近游戏&#xff1a; 写一个程序模拟“热和冷”游戏&#xff0c;其中计算机随机选择一个1到100之间的数字&#xff0c;用户必须猜这个数字。程序应该用 while 循环持续接收用户输入&#xff0c;直到猜中为止。对每个猜测&#xff0c;程序应告诉用户是太高、太低还是正确。…

Pytorch 7多维

多维读取 numpy xy np.loadtxt(diabetes.csv, delimiter,, dtypenp.float32)print("input data.shape", x_data.shape) x_data torch.from_numpy(xy[:, :-1])# 选择所有行不包括最后一列 y_data torch.from_numpy(xy[:, [-1]])# 选择所有行&#xff0c;只有最后一…

搜维尔科技:Cyber​​glove通过其前所未有的柔性传感器技术,带来了多年的经验、专业知识和可靠性

Cyberglove 概述 新一代数据手套技术 MoCap 手套采用了原始 CyberGlove 产品 20 年经验所建立的技术&#xff0c;产生了改进的和新的特性、能力和设计&#xff0c;非常适合动作捕捉环境。 旧与新相遇&#xff0c; Cyberglove 通过其前所未有的柔性传感器技术&#xff0c;带来…

linux自动化构建工具--make/makefile

目录 1.make/makefile介绍 1.1基本认识 1.2依赖关系、依赖方法 1.3具体操作步骤 1.4进一步理解 1.5默认设置 1.6make二次使用的解释 1.7两个文件的时间问题 1.8总是被执行 1.9特殊符号介绍 1.make/makefile介绍 1.1基本认识 make是一个指令&#xff0c;makefile是一…

mysql面试(六)

前言 本章节详细讲解了一下mysql执行计划相关的属性释义&#xff0c;以及不同sql所出现的不同效果 执行计划 一条查询语句经过mysql查询优化器的各种基于成本和各种规则优化之后&#xff0c;会生成一个所谓的 执行计划&#xff0c;这个执行计划展示了这条查询语句具体查询方…