【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。

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

主窗口

  • 主窗口创建部分
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);  // 窗口可见
    }
}
  • 主窗口样式
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,查看我们的主窗口的显示效果。

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

创建三个容器

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

左侧导航栏容器
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);
    }
}
好友列表容器
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);
    }

}
聊天区容器
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代码
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);
}
  • 测试

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

  • 55
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的JavaSwing仿微信聊天的源代码示例: ``` import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; import java.text.SimpleDateFormat; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; import javax.swing.border.Border; public class ChatFrame extends JFrame implements ActionListener{ private static final long serialVersionUID = 1L; private JTextField textField; private JTextArea textArea; private JButton sendButton; private JPanel southPanel; private JPanel northPanel; private JScrollPane jScrollPane; private JScrollBar jScrollBar; public ChatFrame(){ initUI(); } private void initUI(){ setTitle("仿微信聊天"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(600, 800); setLocationRelativeTo(null); // north panel northPanel = new JPanel(new BorderLayout()); JLabel label = new JLabel("好友昵称"); label.setFont(new Font("微软雅黑", Font.BOLD, 16)); label.setHorizontalAlignment(SwingConstants.CENTER); northPanel.add(label, BorderLayout.CENTER); Border border = BorderFactory.createLineBorder(Color.LIGHT_GRAY); northPanel.setBorder(border); add(northPanel, BorderLayout.NORTH); // center panel textArea = new JTextArea(); textArea.setEditable(false); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); textArea.setFont(new Font("微软雅黑", Font.PLAIN, 16)); jScrollPane = new JScrollPane(textArea); jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); jScrollBar = jScrollPane.getVerticalScrollBar(); add(jScrollPane, BorderLayout.CENTER); // south panel southPanel = new JPanel(new BorderLayout()); southPanel.setPreferredSize(new Dimension(600, 100)); southPanel.setBackground(Color.WHITE); southPanel.setBorder(border); textField = new JTextField(); textField.setFont(new Font("微软雅黑", Font.PLAIN, 16)); sendButton = new JButton("发送"); sendButton.setFont(new Font("微软雅黑", Font.BOLD, 16)); sendButton.addActionListener(this); southPanel.add(textField, BorderLayout.CENTER); southPanel.add(sendButton, BorderLayout.EAST); add(southPanel, BorderLayout.SOUTH); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == sendButton){ String content = textField.getText(); if(content.length() > 0){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sdf.format(new Date()); String text = "我 " + dateStr + "\n" + content + "\n\n"; textArea.append(text); textField.setText(""); jScrollBar.setValue(jScrollBar.getMaximum()); } } } public static void main(String[] args) { ChatFrame chatFrame = new ChatFrame(); chatFrame.setVisible(true); } } ``` 这个示例实现了一个简单的仿微信聊天界面,包括好友昵称、聊天记录和发送消息等功能。其中,northPanel和southPanel是上下两个面板,用来放置好友昵称和发送消息的文本框和按钮;textArea是一个文本区域,用来显示聊天记录;jScrollPane和jScrollBar是滚动面板和滚动条,用来实现聊天记录的滚动显示。在actionPerformed方法中,实现了发送消息的逻辑,将消息添加到聊天记录中,并且将滚动条滚动到最底部。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值