javafx的ListView代入项目的使用
创始人
2024-12-01 06:35:20
0

目录

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

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

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

4.渲染器(ImageCellFctoryFriendList)定制

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


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

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

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

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

​  List ren = (List) 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。

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

具体效果如下:

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

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

 public class ImageCellFactoryFriendList implements Callback, ListCell> {     public ImageCellFactoryFriendList() {     }      public ListCell call(ListView param) {         return new ListCell() {             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);                 }              }         };     } }

相关内容

热门资讯

第8分钟辅助(雀友会钻石辅助器... 第8分钟辅助(雀友会钻石辅助器潮汕麻将)竟然真的是有挂(详细辅助技巧教程)1、完成雀友会钻石辅助器潮...
第五分钟辅助(小程序微乐游戏辅... 第五分钟辅助(小程序微乐游戏辅助)一直有挂(详细辅助玩家教程)1、第五分钟辅助(小程序微乐游戏辅助)...
十分钟辅助(互游辅助)一直是有... 十分钟辅助(互游辅助)一直是有挂(详细辅助细节方法)该软件可以轻松地帮助玩家将互游辅助透视辅助提升到...
第十分钟辅助(新九哥脚本下载)... 第十分钟辅助(新九哥脚本下载)真是真的有挂(详细辅助靠谱教程)小薇(透视辅助)致您一封信;亲爱新九哥...
第3分钟辅助(约战丹东苹果辅助... 第3分钟辅助(约战丹东苹果辅助)好像存在有挂(详细辅助德州论坛);1、用户打开应用后不用登录就可以直...
9分钟辅助(江湖悠悠辅助脚本)... 9分钟辅助(江湖悠悠辅助脚本)真是存在有挂(详细辅助解说技巧);1、江湖悠悠辅助脚本透视辅助简单,江...
1分钟辅助(辅助软件购买平台)... 1分钟辅助(辅助软件购买平台)原来存在有挂(详细辅助技巧教程)1、全新机制【辅助软件购买平台软件透明...
十分钟辅助(天天开心王国辅助器... 十分钟辅助(天天开心王国辅助器)总是存在有挂(详细辅助玩家教你);1、在天天开心王国辅助器ai机器人...
七分钟辅助(开心泉州辅助器)其... 七分钟辅助(开心泉州辅助器)其实真的有挂(详细辅助2025教程)1、开心泉州辅助器机器人多个强度级别...
第五分钟辅助(多乐跑得快游戏辅... 第五分钟辅助(多乐跑得快游戏辅助脚本)真是是有挂(详细辅助教你教程)1、首先打开多乐跑得快游戏辅助脚...