?? ext7_client.java
字號:
import java.io.*;
import javax.swing.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class Ext7_Client extends JFrame implements ActionListener
{
int ServerPort=5000;//使用5000端口進行文本聊天
String ServerIp;//轉換為字符串IP
String ClientName;//轉換為字符串用戶名
JLabel Tips1,Tips2;//提示信息“請輸入服務器的IP”,“請輸入你的名字”
JTextField SIP;//輸入服務端的IP地址
JTextField CName;//輸入用戶名字
JTextField Message;//用來寫消息
JTextArea MessageWindow;//顯示聊天記錄
JPanel Panel1;//客戶端布局
JScrollPane Pane;//
JButton Connect;//連接服務器
JButton Send;//發送消息
JCheckBox Share;
BufferedReader Min;//輸入流
PrintWriter Mout;//輸出流
Socket Client;//進行Socket連接
public Ext7_Client()
{
super("客戶端");
enableEvents(AWTEvent.WINDOW_EVENT_MASK);//用于選擇窗口事件的事件掩碼。
setSize(800,700);
setVisible(true);
JOptionPane.showMessageDialog(null,"歡迎使用本聊天室","",JOptionPane.INFORMATION_MESSAGE);
//****************************************************************
//對JFrame進行布局
//*****************************************************************
Panel1=new JPanel();
Panel1.setBackground(new Color(100,100,100));
add(Panel1);
this.setResizable(false);
Tips1=new JLabel("請輸入服務器IP:");
Panel1.add(Tips1);
SIP=new JTextField("",15);
Panel1.add("East",SIP);
Tips2=new JLabel("請輸入用戶名:");
Panel1.add(Tips2);
CName=new JTextField("",15);
Panel1.add("East",CName);
Connect=new JButton("連接");
Connect.addActionListener(this);
Panel1.add("East",Connect);
Message=new JTextField(40);
Message.addKeyListener(new koLis());//設置鍵盤監聽,實現按回車就可以發送消息
Panel1.add("South",Message);
Send=new JButton("發送");
Send.addActionListener(this);
Send.setEnabled(false);//在沒有輸入服務器IP、、用戶名字、按下“連接”前,不可使用
Panel1.add("South",Send);
MessageWindow=new JTextArea(50,40);
MessageWindow.setEditable(false);
MessageWindow.setFont(new Font("隸書",0,13));
Pane=new JScrollPane(MessageWindow);
Pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Pane.setAutoscrolls(true);
Panel1.add(Pane);
}
//***************************************************************
//動作響應
//*****************************************************************
public void actionPerformed(ActionEvent e)
{
if(!SIP.getText().equals("")&&!CName.getText().equals("")&&e.getSource().equals(Connect))
{//如果已經輸入服務器IP,用戶名字,并按下“連接”
ServerIp=SIP.getText();//.toString();
ClientName=CName.getText();
Login();
CName.setEditable(false);
Connect.setEnabled(false);
Send.setEnabled(true);
Share.setEnabled(true);
//JOptionPane.showMessageDialog(null,"友情提示:請輸入服務器IP以及用戶名","消息對話框",JOptionPane.WARNING_MESSAGE);
}
else
if((SIP.getText().equals("")||CName.getText().equals(""))&&e.getSource().equals(Connect))
{
JOptionPane.showMessageDialog(null,"友情提示:請輸入服務器IP以及用戶名","消息對話框",JOptionPane.WARNING_MESSAGE);
}
if(!Message.getText().equals("")&&e.getSource().equals(Send))
{//如果寫好消息,并按下“發送”
Mout.println("["+ClientName+"]"+Message.getText());
Mout.flush();
Message.setText("");
Message.setFocusable(true);//發送完消息后,將光標指定在Message里面
}
else
if(Message.getText().equals("")&&e.getSource().equals(Send))
{
JOptionPane.showMessageDialog(null,"提示:請輸入聊天內容","消息對話框",JOptionPane.WARNING_MESSAGE);
}
}
//****************************************************************
//成功登陸后所執行的行為
//****************************************************************
public void Login()
{
try
{
Client=new Socket(ServerIp,ServerPort);
Mout=new PrintWriter(Client.getOutputStream());
Min=new BufferedReader(new InputStreamReader(Client.getInputStream()));
Mout.println("歡迎["+ClientName+"]進入聊天室");
Mout.flush();
Receiver r=new Receiver();
r.start();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//*******************************************************************
//接收消息
//******************************************************************
class Receiver extends Thread
{
public void run()
{
String msg=null;
JScrollBar sb;
try
{
msg=Min.readLine();
while(true)
{
MessageWindow.append(msg+"\n");
sb=Pane.getVerticalScrollBar();
sb.setValue(sb.getMaximum()+50);
Message.setEnabled(true);
msg=Min.readLine();
}
}
catch(Exception e)
{
Send.setEnabled(false);
}
}
}
//**********************************************************
//窗口事件響應
//**********************************************************
protected void processWindowEvent(WindowEvent e)
{
if(e.getID()==WindowEvent.WINDOW_CLOSING)
{
quit();
}
super.processWindowEvent(e);
}
//**************************************************************
//quit()的方法
//*************************************************************
void quit()
{
try
{
Mout.println("["+ClientName+"]悄然離開了聊天室");
Mout.flush();
Mout.println("exit");
Mout.flush();
System.out.println("與服務器斷開連接");
Min.close();
Mout.close();
Client.close();
}
catch(Exception e){}
finally
{
System.exit(0);
};
}
//***************************************************************
//Message的鍵盤動作響應
//***************************************************************
class koLis extends KeyAdapter
{
public void keyTyped(KeyEvent e)
{
if(e.getKeyChar()=='\n')
{
if(Message.getText().equals(""))
{
JOptionPane.showMessageDialog(null,"友情提示:請輸入聊天內容","消息提示框",JOptionPane.WARNING_MESSAGE);
}
else
{
Mout.println("["+ClientName+"]"+Message.getText());
Mout.flush();
Message.setText("");
Message.setFocusable(true);//發送完消息后,將光標指定在Message里面
}
}
}
}
//*************************************************************
//main函數
//**************************************************************
public static void main(String[] args)
{
new Ext7_Client();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -