基于JavaFX、Socket、多线程的多客户Server通信小demo(聊天室)

这是一个使用JavaFX、Socket和多线程技术开发的多客户端聊天室示例。该项目旨在满足网络编程课程的需求,可能存在一些小问题,期待改进和错误反馈。
摘要由CSDN通过智能技术生成

写在最前面:由于网络编程课程需要,自己捣鼓了一个基于JavaFX、Socket、多线程的多客户Server通信小demo。有挺多小bug的,如有不足请谅解~ 若有错误欢迎指正~

运行效果图:

 

源码:

package com.wqs.server;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

/**
 * 服务端UI
 * @author 花大侠
 *
 */
public class ServerUI extends Application{
	
	TextArea receivedMsgArea = new TextArea();
	TextField ipText = new TextField();
	TextField portText = new TextField();
	TextArea sendMsgArea = new TextArea();
	TextField statusText = new TextField();
	Button sendButton = new Button(" Send ");
	ObservableList<String> clients = FXCollections.observableArrayList();
	ListView<String> clientListView = new ListView<>(clients);
	
	public void start(Stage primaryStage) throws Exception {
		
		//右边 Received Message
		GridPane rightPane = new GridPane();
		rightPane.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));
		rightPane.setHgap(5.5);
		rightPane.setVgap(5.5);
		rightPane.add(new Label("Received Message:"), 0, 0);
		receivedMsgArea.setWrapText(true);
		receivedMsgArea.setEditable(false);
		receivedMsgArea.setMaxWidth(350);
		receivedMsgArea.setPrefHeight(410);
		rightPane.add(receivedMsgArea, 0, 1);
		
		//左边 IPAdress+Port
		GridPane leftPane1 = new GridPane();
		leftPane1.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));
		leftPane1.setHgap(5.5);
		leftPane1.setVgap(5.5);
		leftPane1.add(new Label("IPAdress:"), 0, 0);
		ipText.setEditable(false);
		leftPane1.add(ipText, 1, 0);
		leftPane1.add(new Label("Port:"), 0, 1);
		portText.setEditable(false);
		leftPane1.add(portText, 1, 1);
		
		//左边 Choose Client
		GridPane leftPane2 = new GridPane();
		leftPane2.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));
		leftPane2.setHgap(5.5);
		leftPane2.setVgap(5.5);
		leftPane2.add(new Label("Choose Client:"), 0, 0);
		clientListView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
		clientListView.setMaxHeight(80);
		clientListView.setMaxWidth(275);
		leftPane2.add(clientListView, 0, 1);
		//左边 Send Message
		leftPane2.add(new Label("Send Message:"), 0, 2);
		sendMsgArea.setMaxHeight(150);
		sendMsgArea.setMaxWidth(275);
		sendMsgArea.setWrapText(true);
		leftPane2.add(sendMsgArea, 0, 3);
		
		//左边 Connect Status + button
		GridPane 
  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值