?? chatframe.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 + -