【JavaSwing仿微信电脑版本】主界面实现

介绍

Java有一些主流的GUI框架,包括AWT,Swing、JavaFX等。AWT功能比较简易,JavaFx上手比较麻烦,而Swing是Java提供的轻量级的GUI框架,使用简单,上手也比较容易。

Swing框架提供了各种各样的类,用于创建不同类型的GUI组件和应用程序,使用Swing库可以使用图片,文本,输入框,列表等。

最近使用Swing做了一些简单的带用户界面的Java程序,学过Java的都知道Java是一个高级计算机编程语言之一,Java可以做后端开发,算法开发等,使用Java开发桌面应用比较少,因为Java提供的UI库并不美观,使用它创建的界面比较先low。但是Java提供了面向对象,我们可以结合Java已提供的UI库和自己自定义一些功能实现比较好看的图形用户界面。

本文使用Swing库 仿微信PC Windows版本实现了一个图形用户界面,实现效果截图如下图所示。

微信PC Windows版本主界面截图如下:

下面我们一步步地使用Swing库完成 图形用户界面的设计和开发,每个步骤有相关介绍。使用的开发环境如下:

操作系统:window11 家庭版

Java版本:JDK1.8

使用软件:IDEA社区版

创建项目

为方便开发和管理项目分别创建三个包,把每个不同部分都分开来开发。

data:存放一些用户数据,好友列表等数据。

theme:页面样式(颜色,字体,窗口大小等)

ui:创建页面

创建页面

界面划分分析

我们可以把微信的主界面分为三个模块,分别是左侧导航栏,好友列表和聊天区。界面分好以后可以把不同区的功能分开来开发。

窗口创建

上面我们已经分析好窗口的构造和元素,下面我们可以开始创建串口。

我们分别创建4个类,一个MainWindow作为主窗口,继承JFrame,作为我们的主界面。

LeftBarPanel类:作为左侧导航栏,继承JPanel。

FriendListPanel类:好友列表显示,继承JPanel.

ChatPanel类:作为聊天区,继承JPanel。

创建好相关类后我们就可以按分好的模块进行开发。

主窗口

  • 主窗口创建部分
scala 复制代码
package com.mumu.java.wechat_gui.ui;

import javax.swing.*;

import static com.mumu.java.wechat_gui.theme.MainWindowTheme.*;

/**
 * @Author: MuMu
 * @Date: 2024/4/9 10:19
 */
public class MainWindow extends JFrame {
    public MainWindow() {
        setTitle(Window_title);  // 窗口标题
        setSize(Window_width, Window_height);  // 窗口大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // 关闭按钮:退出程序
        setVisible(true);  // 窗口可见
    }
}
  • 主窗口样式
java 复制代码
package com.mumu.java.wechat_gui.theme;

/**
 * @Author: MuMu
 * @Date: 2024/4/9 10:26
 */
public class MainWindowTheme {
    public static final String Window_title = "JFrame微信";
    public static final int Window_width = 720;
    public static final int Window_height = 550;
}
  • 主窗口运行测试

Java程序从main函数开始执行,所以我们在项目中创建一个main函数,运行我们的MainWindow,查看我们的主窗口的显示效果。

java 复制代码
package com.mumu.java.wechat_gui;

import com.mumu.java.wechat_gui.ui.MainWindow;

/**
 * @Author: MuMu
 * @Date: 2024/4/9 10:00
 */
public class Main {
    public static void main(String[] args) {
        MainWindow mainWindow = new MainWindow();
    }
}

创建三个容器

我们上面已经把主界面分了三个部分,下面我们按分好的分别创建每个容器。

左侧导航栏容器

java 复制代码
package com.mumu.java.wechat_gui.ui;

import javax.swing.*;
import java.awt.*;

import static com.mumu.java.wechat_gui.theme.LeftBarTheme.*;

/**
 * @Author: MuMu
 * @Date: 2024/4/9 10:38
 */
public class LeftBarPenal extends JPanel {
    public LeftBarPenal(){
        initLayout();
    }

    private void initLayout(){
        setLayout(new BorderLayout(0,40));
        setBackground(Left_bar_color);

        JLabel jLabel = new JLabel("  导航栏  ");
        jLabel.setForeground(new Color(255, 255, 255));
        add(jLabel, BorderLayout.CENTER);
    }
}

好友列表容器

java 复制代码
package com.mumu.java.wechat_gui.ui;

import javax.swing.*;
import java.awt.*;

import static com.mumu.java.wechat_gui.theme.FriendListTheme.Friend_penal_color;

/**
 * @Author: MuMu
 * @Date: 2024/4/9 10:38
 */
public class FriendListPenal extends JPanel {
    public FriendListPenal(){
        initLayout();
    }

    private void initLayout(){
        setLayout(new BorderLayout());
        setBackground(Friend_penal_color);

        JLabel jLabel = new JLabel(" 好友列表");
        add(jLabel, BorderLayout.CENTER);
    }

}

聊天区容器

java 复制代码
package com.mumu.java.wechat_gui.ui;

import javax.swing.*;
import java.awt.*;

import static com.mumu.java.wechat_gui.theme.ChatTheme.Chat_penal_color;

/**
 * @Author: MuMu
 * @Date: 2024/4/9 10:38
 */
public class ChatPenal extends JPanel {
    public ChatPenal(){
        initLayout();
    }

    private void initLayout(){
        setLayout(new BorderLayout());
        setBackground(Chat_penal_color);

        JLabel jLabel = new JLabel(" 聊天区");
        add(jLabel, BorderLayout.CENTER);
    }

}

主界面效果

Java的Swing库提供了一些布局,我们要根据我们的分析选择一个合适的布局来构造我们的主界面,我们在这里选择使用BorderLayout布局。Swing库提供的常见布局介绍如下:

BorderLayout:将容器分为东、西、南、北、中五个区域,每个区域只能放置一个组件,通常用于构建具有边缘控制面板的应用程序。

FlowLayout:按照添加的顺序依次排列组件,当空间不足时会自动换行。

GridLayout:将容器分为行和列,所有的组件都会被等分放置在行和列中。

GridBagLayout:通过设置每个组件的约束条件来确定组件的位置和大小,是最灵活的布局管理器之一。

BoxLayout:沿着单一轴线(水平或垂直)排列组件,可以实现水平或垂直的盒式布局。

CardLayout:允许在同一区域显示多个组件,但一次只能显示其中的一个,通过切换不同的组件来实现视图的切换。

GroupLayout:用于在水平和垂直方向上组织组件,支持嵌套和并列的组件布局。

窗体布局划分

我们先把窗口分为两个区域:导航区和操作区。

导航区包含上面分析的导航栏,操作区包含好友列表和聊天区。

我们使用BorderLayout把每个容器放到主界面上。

  • 主界面布局设计图
  • 布局设计Java代码
csharp 复制代码
private void initLayout(){
    setLayout(new BorderLayout());
    // 左侧导航栏
    add(new LeftBarPenal(), BorderLayout.WEST);

    JPanel jPanel = new JPanel();
    jPanel.setLayout(new BorderLayout());
    jPanel.add(new FriendListPenal(), BorderLayout.WEST);
    jPanel.add(new ChatPenal(), BorderLayout.CENTER);
    add(jPanel);
}
  • 测试

本节到此结束,下节开始实现导航栏和其他部分。

相关推荐
北漂Zachary5 分钟前
四大编程语言终极对比
android·java·php·laravel
小江的记录本12 分钟前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
这儿有一堆花19 分钟前
前端三件套真的落后了吗?揭开现代 Web 开发的底层逻辑
前端·javascript·css·html5
.Cnn1 小时前
JavaScript 前端基础笔记(网页交互核心)
前端·javascript·笔记·交互
醉酒的李白、1 小时前
Vue3 组件通信本质:Props 下发,Emits 回传
前端·javascript·vue.js
anOnion1 小时前
构建无障碍组件之Window Splitter Pattern
前端·html·交互设计
嗑嗑嗑瓜子的猫1 小时前
Java!它值得!
java·开发语言
NotFound4861 小时前
实战分享Python爬虫,如何实现高效解析 Web of Science 文献数据并导出 CSV
前端·爬虫·python
徐小夕2 小时前
PDF无限制预览!Jit-Viewer V1.5.0开源文档预览神器正式发布
前端·vue.js·github
WangJunXiang62 小时前
Haproxy搭建Web群集
前端