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

📄 chatroomclient.java

📁 简单的聊天程序
💻 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 + -