javafx的ListView代入项目的使用

目录

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

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

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

4.渲染器(ImageCellFctoryFriendList)定制

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


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

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

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

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

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

​

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

cpp 复制代码
for (User user : ren) {  

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

cpp 复制代码
​
 this.friendListview.setItems(this.friendList);
                    this.friendList.add(person);

​

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

cpp 复制代码
 this.friendListview.setCellFactory(new ImageCellFactoryFriendList());

4.渲染器(ImageCellFctoryFriendList)定制

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

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

cpp 复制代码
 //更新单元格内容
                    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

cpp 复制代码
          //设置右键菜单
                    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

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

具体效果如下:

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

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

cpp 复制代码
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    yes
                                if (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);
                            }
                    });
                    //设置鼠标点击事件,当右键点击时,显示上述创建的ContextMenu
                    this.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);
                }

            }
        };
    }
}
相关推荐
xiaoliuliu1234520 小时前
xampp-linux-1.8.1.tar.gz 怎么安装?Linux下XAMPP离线安装完整步骤
linux·运维·服务器
落羽凉笙21 小时前
Python基础(4)| 详解程序选择结构:单分支、双分支与多分支逻辑(附代码)
android·服务器·python
ONLYOFFICE21 小时前
入门指南:远程运行 ONLYOFFICE 协作空间 MCP 服务器
运维·服务器·github·onlyoffice
Dovis(誓平步青云)21 小时前
《Linux 核心 IO 模型深析(中篇):探索Cmake与多路转接的高效实现poll》
linux·运维·服务器·数据库·csdn成长记录
EveryPossible21 小时前
cpu展示示例
服务器
Java 码农21 小时前
RabbitMQ集群部署方案及配置指南01
linux·服务器·rabbitmq
郝学胜-神的一滴21 小时前
深入理解Linux中的Try锁机制
linux·服务器·开发语言·c++·程序人生
Java后端的Ai之路21 小时前
【AutoDL算力平台】-MobaXterm 连接 AutoDL 并上传文件资源(图文 + 实操)
服务器·网络·mobaxterm·autodl算力平台
阿巴~阿巴~21 小时前
NAT技术:互联网连接的隐形桥梁
服务器·网络·网络协议·架构·智能路由器·nat·正反向代理
DevOps-IT21 小时前
HTTP状态码(常见 HTTP Status Code 查询)
运维·服务器·网络·网络协议·http