Java网络编程—实现多人聊天

本文介绍了一个基于Java Socket编程的多人聊天室应用程序,详细展示了使用Swing进行GUI设计的过程,包括登录界面和聊天界面的布局设置,以及如何通过JSplitPane实现聊天记录与输入区域的垂直分割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络编程—实现多人聊天

ChatWithSocket1


JFrame

  • mainPanel
  • bPanel

mainPanel

  • namelabel(JLabel)
  • nametext (JTextField)
  • passwordlabel (JLabel)
  • passwordtext (JPasswordField)
        JPanel mainPanel = new JPanel();
        Border border = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); //borderfactory是一个产生创建边框的的工厂类
        mainPanel.setBorder(BorderFactory.createTitledBorder(border, "输入登录信息", TitledBorder.CENTER, TitledBorder.TOP)); //标题登录信息,位于中间,上方
        this.add(mainPanel, BorderLayout.CENTER);   //将mainPanel 添加到中间
        mainPanel.setLayout(null);  //自定义布局
        JLabel namelabel = new JLabel("请输入名称");
        namelabel.setBounds(30, 30, 80, 22);
        mainPanel.add(namelabel);

        nametext = new JTextField();    //名称输入域
        nametext.setBounds(115, 30, 165, 22);
        mainPanel.add(nametext);

        JLabel passwordlabel = new JLabel("请输入密码");
        passwordlabel.setBounds(30, 60, 80, 22);
        mainPanel.add(passwordlabel);
        passwordtext = new JPasswordField();    //密码输入域
        passwordtext.setBounds(115, 60, 165, 22);
        mainPanel.add(passwordtext);

bPanel

  • reset (JButton)
  • submit(JButton)
        JPanel bPanel = new JPanel();
        bPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); //流动布局的右对齐
        this.add(bPanel, BorderLayout.SOUTH);
        JButton reset = new JButton("重置");
        bPanel.add(reset);
        JButton submit = new JButton("提交");
        bPanel.add(submit);

具体布局说明:

  • Icon(图标) -> JLabel(Icon) -> JFrame (JLabel,BorderLayout.NORTH)
  • border(边框)->mainPanel.setBorder ->JFrame(mainPanel,BorderLayout.CENTER)
  • bPanel (下面板) ->bPanel(FlowLayout.RIGHT) ->JFrame(bPanel,BorderLayout.SOUTH)
    实现效果如图所示

ChatWithSocket2

JFrame

  • JSplitPane
  • JPanel

bpanel

  • namelabel (JLabel)
  • closeButton (JButton)
  • sendButton (JButton)
        JPanel bPanel = new JPanel();
        bPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
        this.add(bPanel, BorderLayout.SOUTH);
        JLabel namelabel = new JLabel("昵称: " + this.name + " ");
        bPanel.add(namelabel);
        JButton closeButton = new JButton("关闭");
        bPanel.add(closeButton);
        JButton sendButton = new JButton("发送");
        bPanel.add(sendButton);

splitPane

  • logPanel (JScrollPane) contentArea为JTextArea类型
  • sendPanel (JScrollPane) sendArea为JTextArea类型
        contentArea = new JTextArea();
        contentArea.setLineWrap(true);  //允许换行.控制每行显示长度最大不超过界面长度,只允许竖直滚动
        JScrollPane logPanel = new JScrollPane(contentArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        sendArea = new JTextArea();
        sendArea.setLineWrap(true);
        JScrollPane sendPanel = new JScrollPane(sendArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        //分隔面板
        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, logPanel, sendPanel);  //可以垂直调整..
        splitPane.setDividerLocation(250);
        this.add(splitPane, BorderLayout.CENTER);

程序运行结果如下图显示…
在这里插入图片描述


最终运行结果如下图所示:

在这里插入图片描述


代码已成功上传到Github: [https://github.com/Githubforusc2018/java_chat]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值