import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
/*************************
* 客户端主框架
**************************/
public class DChatClient extends JFrame implements ActionListener
{
/******************
* 界面成员
******************/
JMenuBar mBar=new JMenuBar(); //菜单栏
JToolBar tBar=new JToolBar(); //工具栏
String[] face={"高兴地","微笑地","静静地","轻轻地","生气地","发火地"};
String name="40班";
JTextArea showMessage=new JTextArea(18,100);//所有消息显示框
JScrollPane showMessageScroll=new JScrollPane(showMessage);
JLabel sendToLabel=new JLabel("发 送 至:");
JComboBox allUser=new JComboBox();//存放在线的用户的用户名
JLabel sendMessageLabel=new JLabel("发送消息:");
JLabel actionLabel=new JLabel("表情:");
JComboBox actionList=new JComboBox(face);
JCheckBox checkbox=new JCheckBox("悄悄话");
JTextField sendMessageText=new JTextField(35);//消息发送框
JButton sendButton=new JButton(new ImageIcon("send.gif"));//消息发送按钮
JButton setFontButton=new JButton(new ImageIcon("font.gif"));//字体设置按钮
//设制成静态,方便显示时间
public static JLabel showTime=new JLabel();
JLabel showUserNum=new JLabel();//显示当前在线人数
/*************
* 主菜单
*************/
JMenu operatorMenu=new JMenu("操作(O)");
JMenu userSetMenu=new JMenu("设制(C)");
JMenu helpMenu=new JMenu("帮助(H)");
JMenuItem lineOnItem=new JMenuItem("登陆用户");
JMenuItem lineOffItem=new JMenuItem("注消用户");
JMenuItem exitItem=new JMenuItem("退出");
JMenuItem setNameItem=new JMenuItem("用户设制");
JMenuItem setLinkItem=new JMenuItem("连接设制");
JMenuItem helpItem=new JMenuItem("帮助");
JMenuItem aboutItem=new JMenuItem("关于");
JButton lineOnButton=new JButton("登陆用户");
JButton lineOffButton=new JButton("注消用户");
JButton setNameButton=new JButton("用户设制");
JButton setLinkButton=new JButton("连接设制");
JButton exitButton=new JButton("退出");
JButton helpButton=new JButton("帮助");
JButton aboutButton=new JButton("关于");
/*****************
* 自定义时间显示
*****************/
myTime mytime=null;
/*****************
* 字体设置
*****************/
setMyFont setmyfont=null;
/****************
* 端口连结所需
****************/
String IP="211.69.157.199";
int port=8080; //设制端口
int Flag=0;//0表示未连接,1表示已连接
Socket chatSocket=null;
ObjectInputStream input=null;
ObjectOutputStream output=null;
/***************
* 临听
***************/
clientListener clientlistenr=null;
/*************
* 构造
*************/
public DChatClient()
{
initGUI();
initSetFrame();
initAction();
}
/***************
* 初始化界面
***************/
private void initGUI()
{
this.setLayout(null);
bulidMenuBar();
bulidToolBar();
bulidOther();
enabledInit();//最开始时需要屏蔽的组件
mytime=new myTime(); //启动时间线程
}
/***************
* 设制框架属性
***************/
private void initSetFrame()
{
this.setTitle("聊天室客户端");//设制标题
this.setSize(600,550);//没制框架大小
this.setResizable(false);//设制不能最大化
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setUndecorated(true);//覆盖windows风格
this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);//设制为java风格
this.setIconImage(Toolkit.getDefaultToolkit().getImage("114.gif"));//设制框架图标
this.setLocationRelativeTo(null);//设制框架居中显示
this.setVisible(true);
}
/***************
* 设制菜单栏
***************/
private void bulidMenuBar()
{
setJMenuBar(mBar);
mBar.add(operatorMenu);
mBar.add(userSetMenu);
mBar.add(helpMenu);
operatorMenu.add(lineOnItem);
operatorMenu.add(lineOffItem);
operatorMenu.add(exitItem);
userSetMenu.add(setNameItem);
userSetMenu.add(setLinkItem);
helpMenu.add(helpItem);
helpMenu.add(aboutItem);
//设制助记符
operatorMenu.setMnemonic('O');
userSetMenu.setMnemonic('C');
helpMenu.setMnemonic('H');
//设制快捷键
lineOnItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_O,
InputEvent.CTRL_MASK));
lineOffItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_F,
InputEvent.CTRL_MASK));
exitItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_E,
InputEvent.CTRL_MASK));
setNameItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_N,
InputEvent.CTRL_MASK));
setLinkItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_L,
InputEvent.CTRL_MASK));
helpItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_H,
InputEvent.CTRL_MASK));
aboutItem.setAccelerator(KeyStroke.getKeyStroke (KeyEvent.VK_A,
InputEvent.CTRL_MASK));
}
/*****************
* 设制工具栏
*****************/
private void bulidToolBar()
{
tBar.add(setNameButton);
tBar.addSeparator();
tBar.add(setLinkButton);
tBar.addSeparator();
tBar.add(lineOnButton);
tBar.addSeparator();//设制间格
tBar.add(lineOffButton);
tBar.addSeparator();
tBar.add(exitButton);
setNameButton.setToolTipText("更改用户信息");
setLinkButton.setToolTipText("设制连接到服务器的信息");
lineOnButton.setToolTipText("与指定服务器进行连接");
lineOffButton.setToolTipText("更改用户名");
exitButton.setToolTipText("退出系统");
tBar.setFloatable(false);//设制是否浮动
this.add(tBar);
tBar.setBounds(0,0,600,40);
}
/***************
* 设制其它组件
***************/
private void bulidOther()
{
JPanel psend=new JPanel();
JPanel paction=new JPanel();
JPanel p1=new JPanel(new FlowLayout(FlowLayout.LEFT,3,0));
JPanel p2=new JPanel(new FlowLayout(FlowLayout.CENTER));
JPanel p3=new JPanel(new FlowLayout(FlowLayout.CENTER,20,2));
this.add(showMessageScroll);
showMessage.setLineWrap(true);//自动换行
showMessage.setEditable(false);//禁止编辑
showMessage.setFont(new Font("宋体",Font.PLAIN,13));
showMessageScroll.setBounds(5,40,585,350);
this.add(p1);
this.add(p2);
this.add(p3);
psend.add(sendToLabel);
psend.add(allUser);
paction.add(actionLabel);
paction.add(actionList);
p1.add(psend);//,BorderLayout.WEST);
p1.add(paction);//,BorderLayout.CENTER);
p1.add(checkbox);//,BorderLayout.EAST);
p1.add(setFontButton);
setFontButton.setBorder(new EmptyBorder(1,1,1,1));//设制为无边框按钮
setFontButton.setToolTipText("字体设制");
allUser.addItem("所有人");
p1.setBounds(10,395,480,40);
p2.add(sendMessageLabel);
p2.add(sendMessageText);
sendMessageText.setToolTipText("你可以按Enter直接发送消息");
p2.add(sendButton);
sendButton.setBorder(new EmptyBorder(1,1,1,1));//设制为无边框按钮
sendButton.setToolTipText("快捷键 Enter");
p2.setBounds(5,430,535,40);
p3.add(showTime);
p3.add(showUserNum);
p3.setBounds(10,465,585,30);
}
private void initAction()
{
lineOnItem.addActionListener(this);//操作Menu
lineOffItem.addActionListener(this);
exitItem.addActionListener(this);
setNameItem.addActionListener(this); //设制Menu
setLinkItem.addActionListener(this);
helpItem.addActionListener(this); //帮助Menu
aboutItem.addActionListener(this);
lineOnButton.addActionListener(this);//操作Button
lineOffButton.addActionListener(this);
exitButton.addActionListener(this);
setNameButton.addActionListener(this);//设制Button
setLinkButton.addActionListener(this);
helpButton.addActionListener(this);//帮助Button
aboutButton.addActionListener(this);
setFontButton.addActionListener(this);
sendButton.addActionListener(this);
sendMessageText.addActionListener(this);
//当关闭窗口时的事件
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e){
if(Flag == 1)
{
disconnection();
}
Syste