package Client;

import Client.Client;

import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ClientWindow extends JFrame{

    JPanel clientSettings;  // 客户端设置面板
    JTextField addressField;  // IP地址输入框
    JTextField portField;  // 端口号输入框
    JButton connectBtn;  // 连接按钮

    JPanel areaPanel;  // 消息显示面板
    JTextArea messageArea;  // 消息显示区域

    JPanel sendPanel;  // 消息发送面板
    JTextField sendField;  // 消息输入框
    JButton sendBtn;  // 发送按钮

    Client client;  // 客户端对象

    public ClientWindow() {
        super('客户端');  // 设置窗口标题

        this.setSize(500,300);  // 设置窗口大小
        this.setResizable(false);  // 禁止窗口大小调整
        this.setLayout(new BorderLayout());  // 设置窗口布局为边界布局

        initializeServerSettings();  // 初始化服务器设置面板
        initializeAreaPanel();  // 初始化消息显示面板
        initializeSendPanel();  // 初始化消息发送面板

        this.add(clientSettings,BorderLayout.NORTH);  // 将服务器设置面板添加到窗口的北部位置
        this.add(areaPanel,BorderLayout.CENTER);  // 将消息显示面板添加到窗口的中部位置
        this.add(sendPanel,BorderLayout.SOUTH);  // 将消息发送面板添加到窗口的南部位置

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // 设置窗口关闭操作为退出程序
        this.setVisible(true);  // 设置窗口可见

        // 连接按钮的点击事件处理
        connectBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    int port = Integer.parseInt(portField.getText());  // 获取端口号输入框中的端口号
                    client = new Client(port,messageArea, addressField.getText());  // 创建一个客户端对象
                } catch(java.lang.NumberFormatException exception) {
                    messageArea.append('- 端口格式有误,请重新输入。\n');  // 如果端口号输入框中的内容不是数字,则显示错误提示信息
                }

                System.out.println(portField.getText());
            }
        });

        // 发送按钮的点击事件处理
        sendBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println(sendField.getText());  // 输出发送框中的内容到控制台
                client.sendMsg(sendField.getText());  // 调用客户端对象的sendMsg方法发送消息
                sendField.setText('');  // 清空发送框中的内容
            }
        });

    }

    // 初始化服务器设置面板
    private void initializeServerSettings() {
        clientSettings = new JPanel();  // 创建服务器设置面板
        addressField = new JTextField(20);  // 创建IP地址输入框,长度为20
        portField = new JTextField(10);  // 创建端口号输入框,长度为10
        connectBtn = new JButton('Connect');  // 创建连接按钮
        clientSettings.setBorder(new EmptyBorder(10, 5, 10, 5));  // 设置面板的边框

        clientSettings.add(new JLabel('IP:'));  // 在面板中添加一个标签,内容为'IP:'
        clientSettings.add(addressField);  // 在面板中添加IP地址输入框
        clientSettings.add(new JLabel('Port:'));  // 在面板中添加一个标签,内容为'Port:'
        clientSettings.add(portField);  // 在面板中添加端口号输入框
        clientSettings.add(connectBtn);  // 在面板中添加连接按钮
    }

    // 初始化消息发送面板
    private void initializeSendPanel() {
        sendPanel = new JPanel();  // 创建消息发送面板
        sendBtn = new JButton('Say');  // 创建发送按钮
        sendField = new JTextField(30);  // 创建消息输入框,长度为30
        sendPanel.setBorder(new EmptyBorder(10, 5, 10, 5));  // 设置面板的边框

        sendPanel.add(new JLabel('Say:'));  // 在面板中添加一个标签,内容为'Say:'
        sendPanel.add(sendField);  // 在面板中添加消息输入框
        sendPanel.add(sendBtn);  // 在面板中添加发送按钮
    }

    // 初始化消息显示面板
    private void initializeAreaPanel() {
        areaPanel = new JPanel();  // 创建消息显示面板
        messageArea = new JTextArea(9, 40);  // 创建消息显示区域,大小为9行40列
        areaPanel.add(new JScrollPane(messageArea));  // 在面板中添加带滚动条的消息显示区域
    }

}
Java 客户端窗口程序 - 连接服务器并发送消息

原文地址: https://www.cveoy.top/t/topic/o4jy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录