「java窗口聊天」java聊天界面设计

博主:adminadmin 2022-11-30 11:05:09 83

本篇文章给大家谈谈java窗口聊天,以及java聊天界面设计对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

高手进,java实现聊天功能?

。。。这个我以前也遇到过、不过我是用C#写的、不过后来也有java的、你可以、使用Swing做的简单界面,及使用Socket套接字实现简单聊天 。。。。。。但是、我不知道你问的是C/S模式还是B/S 模式?

其中、B/S模式可以用Servlet来实现,思路是通过Context上下文绑定参数实现

而C/S模式的,是通过RMI远程调用的方法实现的。。。先给你个C/S模式的核心代码。。。import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

import java.net.*;public class Server extends JFrame

{

public static void main(String [] args)

{

Server server=new Server();

//设定框架的关闭方式

server.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//显示框架

server.setVisible(true);

server.pack();

CreateServer cs=new CreateServer(server);

}

// 设定框架的宽度和高度

private static final int WIDTH=450;

private static final int HEIGHT=450;

// 聊天信息框

JTextArea mainArea=new JTextArea(12,35);

// 发送信息的填写框

JTextArea sendArea=new JTextArea(5,30);

// 构造函数

public Server()

{

//定位框架

Toolkit kit=Toolkit.getDefaultToolkit();

Dimension screenSize=kit.getScreenSize();//获取电脑当前分辨率

int width=screenSize.width;

int height=screenSize.height;

int x=(width-WIDTH)/2;

int y=(height-HEIGHT)/2;

//设置窗口显示位置

setLocation(x,y);

//设置框架大小

setSize(WIDTH,HEIGHT);

//设置标题

setTitle("小新新聊天服务器");

//设置窗口的自定义大小

setResizable(false);

//在内容表格上创建3个面板并加入到内容表格

Container con=this.getContentPane();

JPanel labelPanel=new LabelPanel();

con.add(labelPanel,BorderLayout.NORTH);

JPanel contentPanel=new ContentPanel();

con.add(contentPanel,BorderLayout.CENTER);

JPanel sendPanel=new SendPanel();

con.add(sendPanel,BorderLayout.SOUTH);

}

//聊天窗口的标题面板

class LabelPanel extends JPanel

{

public LabelPanel()

{

Font font=new Font("Dialog",Font.BOLD,18);

JLabel label=new JLabel("欢迎使用小新新聊天服务器");

label.setFont(font);

this.add(label);

}

}

// 聊天信息查看面板

//该面板内的区域为不可编辑区域

class ContentPanel extends JPanel

{

public ContentPanel()

{

FlowLayout fl=new FlowLayout(FlowLayout.CENTER);

this.setLayout(fl);

mainArea.setLineWrap(true);

mainArea.setEditable(false);

JScrollPane scrollPanel=new JScrollPane(mainArea);

this.add(scrollPanel);

}

}

// 填写发送信息的面板

class SendPanel extends JPanel

{

public SendPanel()

{

//面板的组件之间水平分隔15像素,垂直间距10像素

FlowLayout layout=new FlowLayout(FlowLayout.LEFT,15,10);

this.setLayout(layout);

sendArea.setLineWrap(true);

JScrollPane scrollPanel=new JScrollPane(sendArea);

this.add(scrollPanel);

JButton send=new JButton("发送");

this.add(send);

//对发送按钮注册动作监听器

send.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

String msg=sendArea.getText();

if(!msg.equals(""))

{

mainArea.append("【服务器】:"+msg+"\n");

sendArea.setText("");

CreateServer.sendMsg(msg);

}

else

{

return;

}

}

});

}

}

}

//创建服务器ServerSocket的类

class CreateServer extends Thread

{

private Server server;

private static BufferedReader in=null;//存储客户端发送到服务器的数据

private static PrintWriter out=null;//存储服务器发送到客户端的数据

private Socket socket=null;//等待客户端连接socket

private ServerSocket ss=null;//开启服务器socket连接

//构造函数

public CreateServer(Server s)

{

this.server=s;

try

{

ss=new ServerSocket(2345);

System.out.println("服务器成功启动...!");

socket=ss.accept();//等待客户端请求

//获取输入到服务器的数据

in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

//获取输出到客户端的数据

out=new PrintWriter(socket.getOutputStream(),true);

out.println("你好!");

}

catch(Exception r)

{

r.printStackTrace();

}

this.start();//启动线程

}

//实现信息发送到客户端的发送方法

public static void sendMsg(String s)

{

try

{

out.println("【服务器】:"+s+"\n");

}

catch(Exception e)

{

System.out.println("发送信息失败...!!");

e.printStackTrace();

}

}

// 线程Thread类的run方法实现对客户端发送来的数据监听

//线程启动后开始该方法,执行线程体

public void run()

{

String msg="";

while(true)

{

try

{

msg=in.readLine();

//Thread.sleep(500);//线程睡眠

}

catch (SocketException ex)

{

ex.printStackTrace();

break;

}

catch(IOException r)

{

r.printStackTrace();

break;

}

//若从客户端获取的信息不为空对象也不为空串

//则把信息显示在聊天信息文本域

if(msg!=null msg.trim()!="")

{

server.mainArea.append(msg+"\n");

}

}

}

}

java模拟聊天窗口怎么两个人聊天啊?

简单一点用session,复杂一点么,tomcat上面有聊天室的示例程序,用的长链接

java中怎么用ServerSocket做个有窗口的聊天程序哦!

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Scanner;

public class MyServer extends JFrame implements ActionListener{

JTextArea jta;

JTextField jtf;

JButton jb;

JPanel jp;

ServerSocket ss;

Socket socket;

//网络输入流

Scanner sc;

//网络输出流

PrintWriter pw;

public MyServer()

{

jta = new JTextArea();

jtf = new JTextField(15);

jb = new JButton("发送");

jp = new JPanel();

jp.add(jtf);

jp.add(jb);

JScrollPane jsp = new JScrollPane(jta);

this.add(jsp,BorderLayout.CENTER);

this.add(jp,BorderLayout.SOUTH);

jb.addActionListener(this);

jtf.addActionListener(this);

//展现

this.setTitle("服务器");

this.setSize(300,200);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

// 开放端口

try {

ss = new ServerSocket(9000);

System.out.println("等待连接");

socket = ss.accept();

System.out.println("已连接");

//网络输入流

sc = new Scanner(socket.getInputStream());

//网络输出流

pw = new PrintWriter(socket.getOutputStream(),true);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

while(true)

{

//接受客户端发送数据

String str = sc.nextLine();

//显示多行文本框中

jta.append("客户端说"+str+"\r\n");

}

}

public static void main(String[] args)

{

new MyServer();

}

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getSource()==jb || e.getSource()==jtf)

{

//向客户端发送数据

pw.println(jtf.getText());

//向多行文本框输入历史聊天记录信息

jta.append("服务器说:"+jtf.getText()+"\r\n");

//清空单行文本框内容

jtf.setText("");

}

}

}

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Scanner;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

//客户端程序

public class MyClient extends JFrame implements ActionListener{

JTextArea jta;

JTextField jtf;

JButton jb;

JPanel jp;

Socket socket;

//网络输入流

Scanner sc;

//网络输出流

PrintWriter pw;

public MyClient()

{

jta = new JTextArea();

jtf = new JTextField(15);

jb = new JButton("发送");

jp = new JPanel();

jp.add(jtf);

jp.add(jb);

JScrollPane jsp = new JScrollPane(jta);

this.add(jsp,BorderLayout.CENTER);

this.add(jp,BorderLayout.SOUTH);

jb.addActionListener(this);

jtf.addActionListener(this);

//展现

this.setTitle("客户端");

this.setSize(300,200);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

try {

//建立连接

socket = new Socket("127.0.0.1",9000);

//网络输入流

sc = new Scanner(socket.getInputStream());

//网络输出流

pw = new PrintWriter(socket.getOutputStream(),true);

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

while(true)

{

//接受服务器发送数据

String str = sc.nextLine();

//显示在多行文本框

jta.append("服务器说:"+str+"\r\n");

}

}

public static void main(String[] args) {

new MyClient();

}

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getSource()==jb || e.getSource()==jtf)

{

//向服务器发送数据

pw.println(jtf.getText());

//显示在多行文本框

jta.append("客户端说:"+jtf.getText()+"\r\n");

//清空单行文本框

jtf.setText("");

}

}

}

JAVA编程编写一个聊天窗口界面

刚学java的时候写过有界面,服务端和客户端在一起

一个类就可以搞定,写的有点死,你自己改下

邮箱发过来

急需一个java编程实现的简单聊天窗口代码

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.net.*;

import java.io.*;

public class ClientDemo01 {

public static void main(String[] args){

JFrame f=new JFrame("AA");

JPanel p1=new JPanel();

JPanel p2=new JPanel();

JTextArea ta=new JTextArea(15,30);

ta.setEditable(false); //文本域只读

JScrollPane sp=new JScrollPane(ta); //滚动窗格

JTextField tf=new JTextField(20);

JButton b=new JButton("发送");

p1.add(sp);

p2.add(tf);

p2.add(b);

f.add(p1,"Center");

f.add(p2,"South");

f.setBounds(300,300,360,300);

f.setVisible(true);

f.setResizable(false);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Socket socket=null;

BufferedInputStream bis=null;

BufferedOutputStream bos=null;

try{

socket=new Socket("192.168.0.4",5000);

bis=new BufferedInputStream(socket.getInputStream());

bos=new BufferedOutputStream(socket.getOutputStream());

MyThread01 mt=new MyThread01(bis,ta);

mt.start();

}catch(Exception e){

e.printStackTrace();

}

b.addActionListener(new ButtonActionListener01(tf,ta,bos));

}

}

class ButtonActionListener01 implements ActionListener{

JTextField tf;

JTextArea ta;

BufferedOutputStream bos;

public ButtonActionListener01(JTextField tf,JTextArea ta,BufferedOutputStream bos){

this.tf=tf;

this.ta=ta;

this.bos=bos;

}

public void actionPerformed(ActionEvent e){

String message=tf.getText();

if(!message.equals("")){

tf.setText(""); //清空文本框

ta.append("AA:"+message+"\n"); //添加到文本域并换行

try{

bos.write(message.getBytes());

bos.flush();

}catch(Exception ex){

System.out.println("发送失败");

}

}

}

}

class MyThread01 extends Thread{

BufferedInputStream bis;

JTextArea ta;

public MyThread01(BufferedInputStream bis,JTextArea ta){

this.bis=bis;

this.ta=ta;

}

public void run(){

try{

while(true){

byte[] b=new byte[100];

int length=bis.read(b);

String message=new String(b,0,length);

ta.append("BB:"+message+"\n");

}

}catch(Exception e){

e.printStackTrace();

}

}

} import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.net.*;

import java.io.*;

public class ServerDemo01{

public static void main(String[] args){

JFrame f=new JFrame("BB");

JPanel p1=new JPanel();

JPanel p2=new JPanel();

JTextArea ta=new JTextArea(12,30); //文本域,第一个参数为行数,第二个参数为列数

ta.setEditable(false); //文本域只读

JScrollPane sp=new JScrollPane(ta); //滚动窗格

JTextField tf=new JTextField(20);

JButton b=new JButton("发送");

p1.add(sp);

p2.add(tf);

p2.add(b);

f.add(p1,"Center");

f.add(p2,"South");

f.setBounds(300,300,360,300);

f.setVisible(true);

f.setResizable(false);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ServerSocket server=null;

Socket socket=null;

BufferedInputStream bis=null;

BufferedOutputStream bos=null;

try{

server=new ServerSocket(5000);

//ta.append("等待AA连接...\n");

socket=server.accept();

//ta.append("AA已连接\n");

bis=new BufferedInputStream(socket.getInputStream());

bos=new BufferedOutputStream(socket.getOutputStream());

MyThread1 mt=new MyThread1(bis,ta);

mt.start();

}catch(Exception e){

e.printStackTrace();

}

b.addActionListener(new ButtonActionListener1(tf,ta,bos));

}

}

class ButtonActionListener1 implements ActionListener{

JTextField tf;

JTextArea ta;

BufferedOutputStream bos;

public ButtonActionListener1(JTextField tf,JTextArea ta,BufferedOutputStream bos){

this.tf=tf;

this.ta=ta;

this.bos=bos;

}

public void actionPerformed(ActionEvent e){

String message=tf.getText(); //获取文本框中的内容

if(!message.equals("")){

tf.setText(""); //清空文本框

ta.append("BB:"+message+"\n"); //添加到文本域并换行

try{

bos.write(message.getBytes());

bos.flush();

}catch(Exception ex){

System.out.println("发送失败!");

}

}

}

}

class MyThread1 extends Thread{

BufferedInputStream bis;

JTextArea ta;

public MyThread1(BufferedInputStream bis,JTextArea ta){

this.bis=bis;

this.ta=ta;

}

public void run(){

try{

while(true){

byte[] b=new byte[100];

int length=bis.read(b);

String message=new String(b,0,length);

ta.append("AA:"+message+"\n");

}

}catch(Exception e){

e.printStackTrace();

}

}

}

java中如何实现多窗口聊天??求大神帮忙

多开几个聊天窗口就行了。弄一个辅助类,这个类里面记录当前打开的聊天窗口的句柄,这样方便关闭指定的聊天窗口。

或者是直接把所有的窗口集成在一个窗口里面,弄成面板的模式,上面的新开一个窗口在这里就意味着新开一个面板。这种方式比较符合现在人的习惯,个人推荐。就是这种的。

java窗口聊天的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java聊天界面设计、java窗口聊天的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-30,除非注明,否则均为首码项目网原创文章,转载请注明出处。