java swing 架构_求高手用java SWING实现下图结构

展开全部

这是服务器端:

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.net.Socket;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import javax.swing.JFrame;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.JScrollPane;

public class J_ChatClient extends JFrame

{

private ObjectInputStream m_input; // 输入流

private ObjectOutputStream m_output; // 输出流

private JTextField m_enter; // 输入区域32313133353236313431303231363533e4b893e5b19e31333264646561

private JTextArea m_display; // 显示区域

public J_ChatClient( ) // 在图形界面中添加组件

{

super("聊天程序客户端");

Container c = getContentPane( );

m_enter = new JTextField( );

m_enter.setEnabled( false );

m_enter.addActionListener(new ActionListener( )

{

public void actionPerformed( ActionEvent event )

{ // 向服务器端发送数据

try

{

String s = event.getActionCommand( );

m_output.writeObject( s );

m_output.flush( );

mb_displayAppend( "客户端: " + s );

m_enter.setText( "" ); // 清除输入区域的原有内容

}

catch (Exception e)

{

System.err.println("发生异常:" + e);

e.printStackTrace( );

} // try-catch结构结束

} // 方法actionPerformed结束

} // 实现接口ActionListener的内部类结束

); // addActionListener方法调用结束

c.add( m_enter, BorderLayout.NORTH );

m_display = new JTextArea( );

c.add( new JScrollPane( m_display ), BorderLayout.CENTER );

} // J_ChatClient构造方法结束

public void mb_displayAppend( String s )

{

m_display.append( s + "\n" );

m_display.setCaretPosition( m_display.getText( ).length( ) );

m_enter.requestFocusInWindow( ); // 转移输入焦点到输入区域

} // 方法mb_displayAppend结束

public boolean mb_isEndSession( String m )

{

if (m.equalsIgnoreCase("q"))

return(true);

if (m.equalsIgnoreCase("quit"))

return(true);

if (m.equalsIgnoreCase("exit"))

return(true);

if (m.equalsIgnoreCase("end"))

return(true);

if (m.equalsIgnoreCase("结束"))

return(true);

return(false);

} // 方法mb_isEndSession结束

public void mb_run( String host, int port)

{

try

{

mb_displayAppend("尝试连接");

Socket s = new Socket(host, port);

String m; // 来自服务器端的消息

m_output = new ObjectOutputStream( s.getOutputStream( ) );

m_input = new ObjectInputStream( s.getInputStream( ) );

m_enter.setEnabled( true );

do

{

m = (String) m_input.readObject( );

mb_displayAppend("服务器端: " + m);

} while(!mb_isEndSession( m ));// do-while循环结束

m_output.writeObject("q"); // 通知服务端退出程序

m_output.flush( );

m_output.close( );

m_input.close( );

s.close( );

System.exit( 0 );

}

catch (Exception e)

{

System.err.println("发生异常:" + e);

e.printStackTrace( );

mb_displayAppend("发生异常");

} // try-catch结构结束

} // 方法mb_run结束

public static void main(String args[ ])

{

J_ChatClient app = new J_ChatClient( );

app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

app.setSize(350, 150);

app.setVisible(true);

if ( args.length == 0 )

app.mb_run("localhost", 5000);

else app.mb_run(args[0], 5000);

} // 方法main结束

} // 类J_ChatClient结束

这是客户端:

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.net.ServerSocket;

import java.net.Socket;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import javax.swing.JFrame;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.JScrollPane;

public class J_ChatServer extends JFrame

{

private ObjectInputStream m_input; // 输入流

private ObjectOutputStream m_output; // 输出流

private JTextField m_enter; // 输入区域

private JTextArea m_display; // 显示区域

private int m_clientNumber = 0; // 连接的客户数

public J_ChatServer( ) // 在图形界面中添加组件

{

super("聊天程序服务器端");

Container c = getContentPane( );

m_enter = new JTextField( );

m_enter.setEnabled( false );

m_enter.addActionListener(new ActionListener( )

{

public void actionPerformed( ActionEvent event )

{ // 向客户端发送数据

try

{

String s = event.getActionCommand( );

m_output.writeObject( s );

m_output.flush( );

mb_displayAppend( "服务器端: " + s );

m_enter.setText( "" ); // 清除输入区域的原有内容

}

catch (Exception e)

{

System.err.println("发生异常:" + e);

e.printStackTrace( );

} // try-catch结构结束

} // 方法actionPerformed结束

} // 实现接口ActionListener的内部类结束

); // addActionListener方法调用结束

c.add( m_enter, BorderLayout.NORTH );

m_display = new JTextArea( );

c.add( new JScrollPane( m_display ), BorderLayout.CENTER );

} // J_ChatServer构造方法结束

public void mb_displayAppend( String s )

{

m_display.append( s + "\n" ); //将给定文本追加到文档结尾

//设置 TextComponent 的文本插入符的位置。注意,插入符可跟踪更改,所以如果组件的基础文本被更改,

//则此位置可能会移动。如果文档为 null,则不执行任何操作。位置必须在 0 和组件的文本长度之间,否则将抛出异常

m_display.setCaretPosition( m_display.getText( ).length( ) );

m_enter.requestFocusInWindow( ); // 转移输入焦点到输入区域

} // 方法mb_displayAppend结束

public boolean mb_isEndSession( String m )

{

if (m.equalsIgnoreCase("q"))

return(true);

if (m.equalsIgnoreCase("quit"))

return(true);

if (m.equalsIgnoreCase("exit"))

return(true);

if (m.equalsIgnoreCase("end"))

return(true);

if (m.equalsIgnoreCase("结束"))

return(true);

return(false);

} // 方法mb_isEndSession结束

public void mb_run( )

{

try

{

ServerSocket server = new ServerSocket(5000);

String m; // 来自客户端的消息

while (true)

{

m_clientNumber++;

mb_displayAppend("等待连接[" + m_clientNumber + "]" + " ");

Socket s = server.accept( );

mb_displayAppend("接收到客户端连接[" + m_clientNumber + "]" + " ");

m_output = new ObjectOutputStream( s.getOutputStream( ) );

m_input = new ObjectInputStream( s.getInputStream( ) );

m_output.writeObject("连接成功");

m_output.flush( );

m_enter.setEnabled( true );

do

{

m = (String) m_input.readObject( );

mb_displayAppend("客户端: " + m);

} while(!mb_isEndSession( m ));// do-while循环结束

m_output.writeObject("q"); // 通知客户端退出程序

m_output.flush( );

m_enter.setEnabled( false );

m_output.close( );

m_input.close( );

s.close( );

mb_displayAppend("连接[" + m_clientNumber + "]结束" + " ");

} // while循环结束

}

catch (Exception e)

{

System.err.println("发生异常:" + e);

e.printStackTrace( );

mb_displayAppend("连接[" + m_clientNumber +"]发生异常" + " ");

} // try-catch结构结束

} // 方法mb_run结束

public static void main(String args[ ])

{

J_ChatServer app = new J_ChatServer( );

app.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);

app.setSize(350, 150);

app.setVisible(true);

app.mb_run( );

} // 方法main结束

} // 类J_ChatServer结束

楼主看看就应该懂了,我注释的很详细的,这个是我以前学Socket编程的时候,写的一个例子

追问

恩。。不知道你这是不是贴过来的,你这一段代码绝对不是回答我的提问的。大家注意鸟,他这段是一个简单的服务器和客户端的对话框,大家有需要的弄走了。这么多天没人回答,哎,伤心,不过我已经解决了。分就给你了。

本回答由提问者推荐

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值