首页 > 编程语言 >仿微信聊天程序 - 07. 好友信息

仿微信聊天程序 - 07. 好友信息

时间:2023-07-16 13:44:33浏览次数:35  
标签:界面 07 fx void 信息 仿微信 public 好友

本文是仿微信聊天程序专栏的第七篇文章,主要记录了【好友信息】的界面实现。

界面设计

这里的好友信息界面没有处理复杂的功能,仅仅显示好友信息,支持在此界面中发起聊天而已,总体的界面设计如下图所示:

界面布局

好友信息仅仅只是信息展示,布局相对比较简单,这里采用VBox和HBox组合使用的方式,完整的布局fxml代码如下:

<VBox prefHeight="610.0" prefWidth="546.0" styleClass="profile-pane"
      stylesheets="@ContactsProfileController.css"
      xmlns:fx="http://javafx.com/fxml"
      fx:controller="michong.javafx.wx.view.contacts.ContactsProfileController">
    <children>
        <HBox alignment="CENTER" spacing="20.0" VBox.vgrow="ALWAYS">
            <children>
                <VBox alignment="CENTER_LEFT" spacing="5.0" HBox.hgrow="ALWAYS">
                    <children>
                        <Label fx:id="nicknameLabel" style="-fx-font-size: 26px;"/>
                        <Label styleClass="autograph-label" text="微信小程序搜一搜: Coding鱼塘"/>
                    </children>
                </VBox>
                <ImageView fx:id="avatarImageView" fitHeight="60.0" fitWidth="60.0"/>
            </children>
            <padding>
                <Insets bottom="100.0" left="100.0" right="100.0" top="30.0"/>
            </padding>
        </HBox>
        <Separator>
            <padding>
                <Insets left="100.0" right="100.0"/>
            </padding>
            <VBox.margin>
                <Insets top="50.0"/>
            </VBox.margin>
        </Separator>
        <StackPane prefHeight="200.0">
            <children>
                <Button styleClass="send-message-button" text="发消息" onAction="#onSendMessageClick"/>
            </children>
        </StackPane>
    </children>
</VBox>

样式美化

好友信息界面的样式美化主要针对按钮,相对比较简单,完整的CSS代码如下:

.profile-pane {
  -fx-background-color: #fafafa;
}
.autograph-label {
  -fx-font-size: 14px;
  -fx-text-fill: #c0c0c0;
}
.send-message-button {
  -fx-padding: 10px 40px;
  -fx-font-size: 14px;
  -fx-text-fill: #fff;
  -fx-fill: #fff;
  -fx-background-color: #5cb85c;
  -fx-border-color: #4cae4c;
}
.send-message-button:hover {
  -fx-cursor: hand;
  -fx-background-color: #449d44;
  -fx-border-color: #398439;
}

逻辑控制

调整原来好友列表的事件控制逻辑,当单击好友列表项时显示好友信息界面,这里只是静态显示,动态拉取好友信息后续功能将继续完善,控制代码如下:

void initializeEvent() {
    contactsListView.getSelectionModel().selectedItemProperty().addListener((obj, ov, nv) -> {
        if (Objects.nonNull(nv)) {
            Pane main = FXComponent.mainComponent();
            main.getChildren().clear();
            main.getChildren().add(FXComponent.contactsProfileComponent(nv.getId()));
        }
    });
}

数据填充

在逻辑控制部分加载界面的时候会传入好友的ID,在Controller中可以拉去这个好友的信息,这里需要用到Controller传值,所以自定义了一个UserDataController接口:

/**
 * @author michong
 */
public interface UserDataController {
    void initialize(Object data);
}

好友信息的Controller实现这个接口,根据不同的ID显示不用的用户信息:

/**
 * @author michong
 */
public class ContactsProfileController implements UserDataController {
    public ImageView avatarImageView;
    public Label nicknameLabel;

    private Long contactsId;

    @Override
    public void initialize(Object data) {
        contactsId = (Long) data;
        initializeUI();
        initializeEvent();
        renderDebugData();
    }

    void initializeUI() {
    }

    void initializeEvent() {
    }

    void renderDebugData() {
        nicknameLabel.setText("WxID: " + contactsId);
        avatarImageView.setImage(FXAvatar.def());
    }

    public void onSendMessageClick(ActionEvent actionEvent) {
    }
}

支持传参

FX新增支持传参数的fxml.Controller加载方法:

public static Parent fxml(Class<? extends UserDataController> controller, Object data) {
    String uri = "/" + controller.getName().replace(".", "/") + ".fxml";
    try {
        FXMLLoader loader = new FXMLLoader(Objects.requireNonNull(controller.getResource(uri)));
        Parent root = loader.load();
        UserDataController ctrl = loader.getController();
        ctrl.initialize(data);
        return root;
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

标签:界面,07,fx,void,信息,仿微信,public,好友
From: https://www.cnblogs.com/michong2022/p/17557758.html

相关文章

  • 仿微信聊天程序 - 06. 好友列表
    本文是仿微信聊天程序专栏的第六篇文章,主要记录了【好友列表】的界面实现。界面设计好友列表在主界面左边,界面UI风格跟聊天列表类似,只不过相比聊天列表更加简单,不需要显示聊天信息,时间等,总体界面设计如下:界面布局跟好友列表一样,聊天列表的布局也分为两部,列表布局和列表中的每......
  • 仿微信聊天程序 - 08. 聊天窗口
    本文是仿微信聊天程序专栏的第八篇文章,主要记录了【聊天窗口】的界面实现。界面设计聊天窗口是整个聊天程序的核心控件,比较复杂,大致可以分为上中下三个部分,上面显示用户昵称以及一些操作菜单,中间是聊天内容显示区域,下面的信息发送的区域,总体界面设计如下:界面布局根据界面设计......
  • 07、Raft算法简介
    本篇内容主要来源于自己学习的视频,如有侵权,请联系删除,谢谢。思考:etcd是如何基于Raft来实现高可用、数据强—致性的?1、什么是Raft算法Raft算法是现在分布式系统开发首选的共识算法。从本质上说,Raft算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致......
  • leetcode day4 24 19 面试题02.07 142
    目录24.两两交换链表中的节点19.删除链表的倒数第N个节点面试题02.07.链表相交14224.两两交换链表中的节点if(head==nullptr||head->next==nullptr){returnhead;}//ans指针,永远指向head,返回值ListNode*ans=newListN......
  • 2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一
    2023-07-15:给你一个非递减的正整数数组nums和整数K,判断该数组是否可以被分成一个或几个长度至少为K的不相交的递增子序列。输入:nums=[1,2,2,3,3,4,4],K=3。输出:true。答案2023-07-15:大体步骤如下:1.初始化计数变量cnt和最大计数变量maxCnt,初始值都为1。2.从索引......
  • 2023-07-15:给你一个 非递减 的正整数数组 nums 和整数 K, 判断该数组是否可以被分成一
    2023-07-15:给你一个非递减的正整数数组nums和整数K,判断该数组是否可以被分成一个或几个长度至少为K的不相交的递增子序列。输入:nums=[1,2,2,3,3,4,4],K=3。输出:true。答案2023-07-15:大体步骤如下:1.初始化计数变量cnt和最大计数变量maxCnt,初始值都为1。2......
  • 2023-07-09~07-15第一周暑假生活
    本周平均学习时间应该是2小时每天,代码时间要短一点在1个小时的样子,解决问题总时长估计是三个小时学习内容和代码内容大部分是js的知识,也有在学习Linux的操作和搭载大数据环境。下周计划重心仍然是放在熟练掌握javaweb目标上——继续学习练习HTML、学习Springboot。下个月再把......
  • 剑指offer_20230715
    剑指Offer67.把字符串转换成整数题目说明写一个函数StrToInt,实现把字符串转换成整数这个功能。不能使用atoi或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符......
  • Python 潮流周刊第 11 期(2023-07-15)
    查看全文:Python潮流周刊#11:如何使用Golang运行Python代码?......
  • 0712最短路选写
    [CF1842D]TenzingandHisAnimalFriendsDescriptionTenzing有\(n\)个朋友,每次举办聚会可以邀请一些朋友,有如下限制:\(1\)必须参加,\(n\)不能参加。有\(m\)条限制\((u,v,w)\),表示\(u\)和\(v\)中只有一个在聚会中的总时间不超过\(w\)。最大化聚会总时间,......