import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Face {
private JButton send,sendFile,clear;
static JButton connect;
JTextArea sendMessage,receiveMessage;
public static List lists;
private JPanel pane;
private int port;
private Client client;
static JFrame jFrame;
private JFileChooser filechoose;
private Checkbox box;
private JTextField friendName;
static Face chat;
public Face(){
pane=new JPanel(new BorderLayout());
connect = new JButton("连接");
clear = new JButton("清屏");
send = new JButton("发送信息");
sendFile= new JButton("发送文件");
lists=new List();
box=new Checkbox("私聊");
JLabel Friend=new JLabel("聊天对象");
friendName=new JTextField("所有人",10);
sendMessage = new JTextArea("", 6, 33);
sendMessage.setLineWrap(true);
receiveMessage = new JTextArea("", 13, 30);
receiveMessage.setLineWrap(true);
receiveMessage.setEditable(false);
JScrollPane SendText = new JScrollPane(sendMessage); // 把滚动条和多行文本框绑定
SendText.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
SendText.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
JScrollPane ReceiveText = new JScrollPane(receiveMessage);// 把滚动条和多行文本框绑定
ReceiveText.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
ReceiveText.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//JScrollPane li=new JScrollPane();
//li.getViewport().add(lists);
send.setEnabled(false);
sendFile.setEnabled(false);
sendMessage.setEnabled(false);
friendName.setEditable(false);
clear.setEnabled(false);
box.setEnabled(false);
lists.setEnabled(false);
FlowLayout f=new FlowLayout();
f.setAlignment(FlowLayout.RIGHT);
JPanel sendFrame=new JPanel(f);
sendFrame.add(send);
sendFrame.add(clear);
sendFrame.add(sendFile);
FlowLayout flow=new FlowLayout();
flow.setAlignment(FlowLayout.LEFT);
JPanel connectFrame=new JPanel(flow);
connectFrame.add(connect);
connectFrame.add(box);
connectFrame.add(Friend);
connectFrame.add(friendName);
JPanel messageFrame=new JPanel(new BorderLayout(10,10));
JLabel jLabel=new JLabel("在 \u0000线\u0000 用\u0000 户",new ImageIcon(getClass().getResource("在线.gif")),JLabel.CENTER);
jLabel.setSize(20,40);
JPanel listFrame=new JPanel(new BorderLayout(10,10));
listFrame.add(jLabel,BorderLayout.NORTH);
listFrame.add(lists,BorderLayout.CENTER);
messageFrame.add(ReceiveText,BorderLayout.NORTH);
messageFrame.add(SendText,BorderLayout.SOUTH);
JPanel centerFrame=new JPanel(new BorderLayout(10,10));
centerFrame.add(messageFrame,BorderLayout.CENTER);
centerFrame.add(listFrame,BorderLayout.EAST);
JPanel lowFrame=new JPanel(new BorderLayout(10,10));
lowFrame.add(centerFrame,BorderLayout.CENTER);
lowFrame.add(sendFrame,BorderLayout.SOUTH);
// lowFrame.setBackground(new Color(70,163,255));
pane.add(connectFrame,BorderLayout.NORTH);
pane.add(lowFrame,BorderLayout.CENTER);
jFrame=new JFrame("我的聊天室");
jFrame.getContentPane().add(pane);
jFrame.setBounds(150,100,500,475);
//jFrame.pack();
jFrame.setResizable(false);
jFrame.setVisible(true);
//连接事件
connect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
connectDialogClass connectDialog=new connectDialogClass(jFrame,"连接服务器");
connectDialog.setVisible(true);
client = new Client(connectDialog.getAddress(),connectDialog.getPort(),connectDialog.getId(),chat);
client.start();
// chat.receiveMessage.append(connectDialog.getAddress());
connect.setEnabled(false);
send.setEnabled(true);
sendFile.setEnabled(true);
sendMessage.setEnabled(true);
lists.setEnabled(true);
clear.setEnabled(true);
jFrame.setTitle("我的聊天室"+"("+connectDialog.getId()+")");
}
}
);
clear.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
receiveMessage.setText("");
}
});
box.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
box.setState(false);
box.setEnabled(false);
friendName.setText("所有人");
}
});
lists.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
String privateChat=((List)e.getSource()).getSelectedItem();
box.setEnabled(true);
friendName.setText(privateChat);
box.setState(true);
}
}
});
sendMessage.addKeyListener(new TFListener());
send.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(sendMessage.getText().equals("")){
emptyError();
}
else{
if(!box.getState()){
client.messageSend(sendMessage.getText());
sendMessage.setText("");
}else{
receiveMessage.append("我对"+friendName.getText()+"说(悄悄话):"+sendMessage.getText()+"\n");
client.messageSend("11111");
client.messageSend(friendName.getText());
client.messageSend(sendMessage.getText());
sendMessage.setText("");
}
}
}
}
);
jFrame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//发送文件事件
sendFile.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(box.getState()){
client.messageSend("11111");
client.messageSend(friendName.getText());
}
JFileChooser fileSend=new JFileChooser();
fileSend.showOpenDialog(jFrame);
File filename=fileSend.getSelectedFile();
client.sendFile(filename);
}
});
}
//发送消息键监听
private class TFListener implements KeyListener {
public void keyPressed(KeyEvent e) {
if ((e.getModifiers()==InputEvent.CTRL_MASK)&&(e.getKeyCode()==KeyEvent.VK_ENTER)) {
if(sendMessage.getText().equals("")){
emptyError();
}else{
if(!box.getState()){
client.messageSend(sendMessage.getText());
sendMessage.setText("");
}else{
receiveMessage.append("我对"+friendName.getText()+"说(悄悄话):"+sendMessage.getText()+"\n");
client.messageSend("111111");
client.messageSend(friendName.getText());
client.messageSend(sendMessage.getText());
sendMessage.setText("");
}
}
}
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
}
public void emptyError(){
JOptionPane.showMessageDialog(
null,"你发送的消息不能为空","警告对话框",JOptionPane.WARNING_MESSAGE);
}
public static void main(String[] args){
chat=new Face();
}
}