⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatframe.java

📁 java chat java chat简易聊天室程序源代码,有很高的参考价值,能在它的基础上进行2次开发.
💻 JAVA
字号:
/* * ChatFrame.java * * Created on 2008年4月21日, 上午9:23 */package chat.client;import chat.common.ChatModelListener;import chat.common.LoginMessage;import chat.common.LogoutMessage;import chat.common.TextMessage;import chat.common.UpdateUserMessage;import chat.common.User;import chat.common.UserListMessage;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.Enumeration;import java.util.List;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.JOptionPane;import javax.swing.JScrollBar;import javax.swing.text.BadLocationException;import javax.swing.text.html.HTMLDocument;/** * * @author  Administrator */public class ChatFrame extends javax.swing.JFrame implements ChatModelListener {    private FaceChooserDialog faceDialog;    /** Creates new form ChatFrame */    public ChatFrame() {        initComponents();        userList.setSelectedIndex(0);        this.addWindowListener(new WindowAdapter() {            @Override            public void windowClosing(WindowEvent e) {                LogoutMessage message = new LogoutMessage();                message.setUser(DefaultClientModel.getInstance().user);                DefaultClientModel.getInstance().sendMsg(message);                setVisible(false);            }        });    }    /** This method is called from within the constructor to     * initialize the form.     * WARNING: Do NOT modify this code. The content of this method is     * always regenerated by the Form Editor.     */    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents    private void initComponents() {        jScrollPane2 = new javax.swing.JScrollPane();        userList = new javax.swing.JList();        jLabel1 = new javax.swing.JLabel();        message = new javax.swing.JTextField();        send = new javax.swing.JButton();        jScrollPane1 = new javax.swing.JScrollPane();        content = new javax.swing.JEditorPane();        selectFace = new javax.swing.JButton();        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);        userList.setModel(DefaultClientModel.getInstance().getListModel());        userList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);        jScrollPane2.setViewportView(userList);        jLabel1.setText("消息:");        send.setText("发送");        send.addActionListener(new java.awt.event.ActionListener() {            public void actionPerformed(java.awt.event.ActionEvent evt) {                sendActionPerformed(evt);            }        });        content.setContentType("text/html");        content.setDocument(DefaultClientModel.getInstance().getDocument());        content.setEditable(false);        jScrollPane1.setViewportView(content);        selectFace.setText("插入表情");        selectFace.addActionListener(new java.awt.event.ActionListener() {            public void actionPerformed(java.awt.event.ActionEvent evt) {                selectFaceActionPerformed(evt);            }        });        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());        getContentPane().setLayout(layout);        layout.setHorizontalGroup(            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)            .addGroup(layout.createSequentialGroup()                .addContainerGap()                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)                    .addGroup(layout.createSequentialGroup()                        .addComponent(jLabel1)                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)                        .addComponent(message, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE))                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 318, Short.MAX_VALUE))                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)                        .addComponent(send, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE))                    .addComponent(selectFace, javax.swing.GroupLayout.Alignment.TRAILING))                .addContainerGap())        );        layout.setVerticalGroup(            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)            .addGroup(layout.createSequentialGroup()                .addContainerGap()                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)                    .addGroup(layout.createSequentialGroup()                        .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE)                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)                        .addComponent(selectFace))                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE))                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)                    .addComponent(jLabel1)                    .addComponent(send)                    .addComponent(message, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))                .addContainerGap())        );        pack();    }// </editor-fold>//GEN-END:initComponents    private void sendActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendActionPerformed        // TODO add your handling code here:        if (message.getText().trim().equals("")) {            JOptionPane.showMessageDialog(this, "消息不能为空!");            return;        }        User user = (User) userList.getSelectedValue();        if (user == null) {            JOptionPane.showMessageDialog(this, "没有选择聊天对象!");            return;        }        List lUser = null;        TextMessage msg = new TextMessage();        msg.setUser(DefaultClientModel.getInstance().user);        //选择所有人        if (user.equals(User.createAllUser())) {            //从List中获取所有用户信息            User[] users = new User[DefaultClientModel.getInstance().listModel.getSize()];            DefaultClientModel.getInstance().listModel.copyInto(users);            lUser = Arrays.asList(users);            //转换成ArrayList ,由于默认转换的list不支持remove功能。            //但是需要将 “所有人”选项 提交给服务器之前删除            List temp = new ArrayList();            temp.addAll(lUser);            temp.remove(User.createAllUser());            lUser = temp;        } else {            //找到聊天对象            lUser = new ArrayList();            lUser.add(userList.getSelectedValue());        }        //发送文本消息        msg.setTo(lUser);        msg.setContent(message.getText());        DefaultClientModel.getInstance().sendMsg(msg);    }//GEN-LAST:event_sendActionPerformed    private void selectFaceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectFaceActionPerformed        // TODO add your handling code here:        if(faceDialog == null){            faceDialog = new FaceChooserDialog(ChatFrame.this);        }        faceDialog.setVisible(true);        message.setText(message.getText()+faceDialog.getFaceString());    }//GEN-LAST:event_selectFaceActionPerformed    /**     * @param args the command line arguments     */    public static void main(String args[]) {        java.awt.EventQueue.invokeLater(new Runnable() {            public void run() {                new ChatFrame().setVisible(true);            }        });    }    // Variables declaration - do not modify//GEN-BEGIN:variables    private javax.swing.JEditorPane content;    private javax.swing.JLabel jLabel1;    private javax.swing.JScrollPane jScrollPane1;    private javax.swing.JScrollPane jScrollPane2;    private javax.swing.JTextField message;    private javax.swing.JButton selectFace;    private javax.swing.JButton send;    private javax.swing.JList userList;    // End of variables declaration//GEN-END:variables    public void doLogin(LoginMessage message) {    }    public void doLogout(LogoutMessage message) {    }    public void doUpdateUser(UpdateUserMessage message) {    }    public void doUserList(UserListMessage message) {    }    public void doTextMessage(TextMessage msg) {        //处理接收到文本消息后的表现层处理        //如果是自己发送的文本消息        if(msg.getUser().equals(DefaultClientModel.getInstance().user)){            try {                HTMLDocument doc = (HTMLDocument)DefaultClientModel.getInstance().getDocument();                doc.insertBeforeEnd(doc.getDefaultRootElement(), DefaultClientModel.getInstance().insertFace("<pre>I Say:" + msg.getContent() + "</pre><br/>"));                                message.setText("");            } catch (BadLocationException ex) {                Logger.getLogger(ChatFrame.class.getName()).log(Level.SEVERE, null, ex);            } catch (IOException ex) {                Logger.getLogger(ChatFrame.class.getName()).log(Level.SEVERE, null, ex);            }        }else{            try {                //服务器转发的文本消息                HTMLDocument doc = (HTMLDocument)DefaultClientModel.getInstance().getDocument();                doc.insertBeforeEnd(doc.getDefaultRootElement(), DefaultClientModel.getInstance().insertFace("<pre>"+msg.getUser() + " Says:" + msg.getContent() + "</pre><br/>"));                //content.append(msg.getUser()+" Says:"+msg.getContent()+"\r\n");            } catch (BadLocationException ex) {                Logger.getLogger(ChatFrame.class.getName()).log(Level.SEVERE, null, ex);            } catch (IOException ex) {                Logger.getLogger(ChatFrame.class.getName()).log(Level.SEVERE, null, ex);            }            //content.append(msg.getUser()+" Says:"+msg.getContent()+"\r\n");        }        //滚动条始终定位到最新的消息        JScrollBar jsb = jScrollPane1.getVerticalScrollBar();        jsb.setValue(content.getHeight());    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -