📄 chatroomclient.java
字号:
package ChatRoom;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.Socket;import java.util.Date;import javax.swing.JFrame;import javax.swing.JOptionPane;/* * ChatRoomClient.java * * Created on 2008年7月30日, 下午10:46 */public class ChatRoomClient extends javax.swing.JFrame implements ActionListener{ /** Creates new form ChatRoomClient */ public ChatRoomClient() { initComponents(); } /** 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=" 生成的代码 "> private void initComponents() { jPanel1 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); jtaall = new javax.swing.JTextArea(); jPanel2 = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); jtasend = new javax.swing.JTextArea(); sendjb = new javax.swing.JButton(); closejb = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jtaall.setColumns(20); jtaall.setFont(new java.awt.Font("Dialog", 1, 14)); jtaall.setRows(5); jScrollPane1.setViewportView(jtaall); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 619, Short.MAX_VALUE) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE) .addContainerGap()) ); jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jtasend.setColumns(20); jtasend.setFont(new java.awt.Font("Dialog", 1, 14)); jtasend.setRows(5); jScrollPane2.setViewportView(jtasend); sendjb.setFont(new java.awt.Font("Dialog", 3, 18)); sendjb.setText("\u53d1\u9001"); closejb.setFont(new java.awt.Font("Dialog", 3, 18)); closejb.setText("\u5173\u95ed"); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 487, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(15, 15, 15) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(closejb, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE) .addComponent(sendjb, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE)) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 106, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup() .addComponent(closejb, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(sendjb, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); jPanel2Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {closejb, sendjb}); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); pack(); }// </editor-fold> private void init(){ jtaall.setEditable(false); do{ String str=JOptionPane.showInputDialog(this,"请输入name:主机IP:port"); if(str!=null){ String[] temp=str.split(":"); try { name=temp[0]; s=new Socket(temp[1],Integer.parseInt(temp[2])); } catch (Exception e) { JOptionPane.showMessageDialog(this, "主机名不存在!请重新输入!"); e.printStackTrace(); } }else System.exit(0); }while(s==null); new ReadMessageThread().start(); } private void sendMessage(String str){ ObjectOutputStream oos=null; try { if(str.equals("")){ JOptionPane.showMessageDialog(this, "不能发送空信息!"); return; } Date d=new Date(); str=name+" : ("+d.toString()+")\n"+str+"\n "; oos=new ObjectOutputStream(s.getOutputStream()); oos.writeObject(str); oos.flush(); if(str.indexOf("quit")!=-1){ System.exit(0); } jtasend.setText(""); } catch (IOException e) { e.printStackTrace(); } } private void action(){ sendjb.addActionListener(this); closejb.addActionListener(this); this.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e) { JFrame jf=new JFrame(); jf.setLocation(400, 300); jf.setVisible(true); int i=JOptionPane.showConfirmDialog(jf, "是否退出?"); if(i==JOptionPane.YES_OPTION){ sendMessage("quit"); System.exit(0); } } }); jtasend.addKeyListener(new KeyAdapter(){ @Override public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER&&e.isControlDown()==true) sendMessage(jtasend.getText()); } }); } public void actionPerformed(ActionEvent e) { if(e.getSource()==sendjb){ sendMessage(jtasend.getText()); }else if(e.getSource()==closejb){ sendMessage("quit"); System.exit(0); } } /** * @param args the command line arguments */ public void showme(){ init(); action(); sendMessage(name+"上线了!"); this.setVisible(true); this.setLocation(300, 300); this.setResizable(false); this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); } class ReadMessageThread extends Thread{ @Override public void run() { ObjectInputStream ois=null; String str=null; try { while(true){ ois=new ObjectInputStream(s.getInputStream()); str=(String)ois.readObject(); jtaall.append(str+"\n"); jtaall.moveCaretPosition(jtaall.getText().length()); } } catch (Exception e) { jtaall.append("与服务器断开!"); jtaall.getText(); e.printStackTrace(); } } } public static void main(String args[]) { new ChatRoomClient().showme(); } // 变量声明 - 不进行修改 private javax.swing.JButton closejb; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTextArea jtaall; private javax.swing.JTextArea jtasend; private javax.swing.JButton sendjb; private Socket s; private String name; // 变量声明结束 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -