java swing聊天_java swing socket聊天示例
packagesockettest;importjava.io.BufferedReader;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundExcepti
packagesockettest;importjava.io.BufferedReader;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.io.PrintWriter;importjava.net.Socket;importjava.sql.Date;importjava.util.ArrayList;importjava.util.List;importjavax.swing.JFrame;importjavax.swing.JSplitPane;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Dimension;importjava.awt.Image;importjava.awt.Toolkit;importjavax.swing.DefaultCellEditor;importjavax.swing.ImageIcon;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.JToolBar;importjavax.swing.JButton;importjavax.swing.JPanel;importjavax.swing.SwingUtilities;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.awt.Panel;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent;importjavax.swing.JScrollPane;importjavax.swing.JTextPane;importjavax.swing.table.DefaultTableModel;importjavax.swing.text.Element;importjavax.swing.text.StyleConstants;importjavax.swing.JTable;importtest.TextAreaRenderer;public class Client extendsJFrame {public static voidmain(String[] args) {
SwingUtilities.invokeLater(newRunnable() {
@Overridepublic voidrun() {new Client().setVisible(true);
}
});
}privateJSplitPane splitPane;privateJToolBar toolBar;privateJButton btnNewButton;privateJButton btnNewButton_1;privateJPanel panel;privateJPanel panel_1;privatePanel panel_2;privatePanel panel_3;privateJButton btnNewButton_2;privateJScrollPane scrollPane;privateJButton btnNewButton_3;private Socket st = null;private PrintWriter pw = null;private BufferedReader ReaderServer = null;publicClient() {
initialize();try{
st= new Socket("127.0.0.1", 8899);
pw= newPrintWriter(st.getOutputStream());
ReaderServer= new BufferedReader(newInputStreamReader(
st.getInputStream()));
}catch(IOException e) {
e.printStackTrace();
}
initTable(new ArrayList());
}private voidinitialize() {
addWindowListener(newWindowAdapter() {
@Overridepublic voidwindowClosing(WindowEvent e) {
dispose();
}
});this.setTitle("客户端");this.setBounds(200, 200, 467, 532);
getContentPane().add(getSplitPane(), BorderLayout.CENTER);
getContentPane().add(getToolBar(), BorderLayout.NORTH);
}privateJSplitPane getSplitPane() {if (splitPane == null) {
splitPane= newJSplitPane();
splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
splitPane.setLeftComponent(getPanel());
splitPane.setRightComponent(getPanel_1());
splitPane.setDividerLocation(300);
splitPane.setDividerSize(3);
}returnsplitPane;
}privateJToolBar getToolBar() {if (toolBar == null) {
toolBar= newJToolBar();
toolBar.add(getBtnNewButton());
toolBar.add(getBtnNewButton_1());
}returntoolBar;
}privateJButton getBtnNewButton() {if (btnNewButton == null) {
btnNewButton= new JButton("菜单");
}returnbtnNewButton;
}privateJButton getBtnNewButton_1() {if (btnNewButton_1 == null) {
btnNewButton_1= new JButton("工具");
}returnbtnNewButton_1;
}privateJPanel getPanel() {if (panel == null) {
panel= newJPanel();
panel.setLayout(new BorderLayout(0, 0));
panel.add(getPanel_3(), BorderLayout.SOUTH);
panel.add(getScrollPane(), BorderLayout.CENTER);
panel.setBackground(Color.white);
}returnpanel;
}privateJPanel getPanel_1() {if (panel_1 == null) {
panel_1= newJPanel();
panel_1.setLayout(new BorderLayout(0, 0));
panel_1.add(getTextPane(),BorderLayout.CENTER);
panel_1.add(getPanel_2_1(), BorderLayout.SOUTH);
}returnpanel_1;
}privatePanel getPanel_2_1() {if (panel_2 == null) {
panel_2= newPanel();
panel_2.setPreferredSize(new Dimension(467, 30));
panel_2.setLayout(null);
panel_2.add(getBtnNewButton_2());
}returnpanel_2;
}privatePanel getPanel_3() {if (panel_3 == null) {
panel_3= newPanel();
panel_3.setPreferredSize(new Dimension(467, 30));
panel_3.setLayout(null);
panel_3.add(getBtnNewButton_3());
JButton btnNewButton_4= new JButton("发送图片");
btnNewButton_4.setBounds(116, 4, 93, 23);
panel_3.add(btnNewButton_4);
}returnpanel_3;
}int i = 0;privateJTable table;privateJTextPane textPane_1;privateJButton getBtnNewButton_2() {if (btnNewButton_2 == null) {
btnNewButton_2= new JButton("发送");
btnNewButton_2.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent e) {
send();if (i == 0) {
i++;
Send send= newSend();
send.start();
}
}
});
btnNewButton_2.setBounds(346, 3, 93, 23);
}returnbtnNewButton_2;
}public voidsend() {try{
ByteArrayOutputStream baos= newByteArrayOutputStream();
ObjectOutputStream oos= newObjectOutputStream(baos);
String inputString=textPane_1.getText();
List list =getImgs();if (list.size() > 0) {
oos.writeObject(newMessage(inputString, list));
}else{
oos.writeObject(newMessage(inputString));
}byte[] by =baos.toByteArray();
oos.close();
baos.close();
StringBuffer sb= newStringBuffer();for (int i = 0; i < by.length; i++) {
sb.append(by[i]);
sb.append(",");
}
pw.print(sb.toString().substring(0, sb.toString().length() - 1));
pw.print("\n");
pw.flush();
}catch(IOException e) {
e.printStackTrace();
}
}public class Send extendsThread {
@Overridepublic voidrun() {super.run();try{
List list = new ArrayList();while (true) {
String clientMessage=ReaderServer.readLine();
String[] string= clientMessage.split(",");byte[] by = new byte[string.length];for (int i = 0; i < string.length; i++) {
by[i]= (byte) Integer.parseInt(string[i]);
}
ByteArrayInputStream ba= newByteArrayInputStream(by);
ObjectInputStream ois= newObjectInputStream(ba);
Message ent=(Message) ois.readObject();
list.add("");
list.add(" 服务端的信息 "
+ (newDate(System.currentTimeMillis())).toString());if ((ent.getMessageString() != null)|| !("".equals(ent.getMessageString().trim()))) {
list.add(ent.getMessageString());
}if (ent.getMessageImageIcons() != null) {
List imgList =ent.getMessageImageIcons();for (int i = 0; i < imgList.size(); i++) {
JLabel label= newJLabel();
label.setIcon(imgList.get(i));
list.add(label);
}
}
initTable(list);
}
}catch(IOException e1) {
e1.printStackTrace();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
}private voidclose() {try{
ReaderServer.close();
pw.close();
st.close();
}catch(IOException e) {
e.printStackTrace();
}
}privateJScrollPane getScrollPane() {if (scrollPane == null) {
scrollPane= newJScrollPane();
scrollPane.setViewportView(getTable());
scrollPane.setBackground(Color.white);
}returnscrollPane;
}privateJButton getBtnNewButton_3() {if (btnNewButton_3 == null) {
btnNewButton_3= new JButton("添加图片");
btnNewButton_3.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent e) {
ImageIcon img=getImg(getbyte());
textPane_1.insertIcon(img);
}
});
btnNewButton_3.setBounds(10, 4, 93, 23);
}returnbtnNewButton_3;
}public byte[] getbyte() {byte[] by = null;try{//file = new File("./classes/test/icon.gif");//image = new ImageIcon(file.getAbsoluteFile().toString());
File file= newFile("C:\\Users\\Administrator\\Desktop\\iReport\\QQ截图20131022163001.png");
FileInputStream fis= newFileInputStream(file);
by= new byte[fis.available()];//循环读取
fis.read(by);
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}returnby;
}public ImageIcon getImg(byte[] by) {
Image img=Toolkit.getDefaultToolkit().createImage(by);
ImageIcon image= newImageIcon();
image.setImage(img.getScaledInstance(230, 150, Image.SCALE_DEFAULT));returnimage;
}public ListgetImgs() {
List list = new ArrayList();for (int i = 0; i < this.textPane_1.getDocument().getRootElements()[0]
.getElementCount(); i++) {
Element root= this.textPane_1.getDocument().getRootElements()[0]
.getElement(i);for (int j = 0; j < root.getElementCount(); j++) {
ImageIcon icon=(ImageIcon) StyleConstants.getIcon(root
.getElement(j).getAttributes());if (icon != null) {
list.add(icon);
}
}
}//System.out.println(list.size()+"===");
returnlist;
}privateJTable getTable() {if (table == null) {
table= newJTable();
table.setShowGrid(false);
table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);
table.setSurrendersFocusOnKeystroke(false);
}returntable;
}public voidinitTable(List list) {
DefaultTableModel dtm= newDefaultTableModel();
dtm.addColumn("");
JTextField tf= newJTextField();
table.setModel(dtm);
table.getColumnModel().getColumn(0).setCellEditor(newDefaultCellEditor(tf));
table.getColumnModel().getColumn(0).setCellRenderer(newTextAreaRenderer());for (int i = 0; i < list.size(); i++) {
dtm.addRow(newObject[] { list.get(i) });
}
}privateJTextPane getTextPane() {if (textPane_1 == null) {
textPane_1= newJTextPane();
}returntextPane_1;
}
}
更多推荐
所有评论(0)