/** */ /** * 聊天主窗口 */ package mychat; import java.awt. * ; import java.awt.event. * ; import javax.swing. * ; import javax.swing.UIManager; import javax.swing.border.TitledBorder; import chatsocket. * ; import filetrans. * ; import java.net. * ; import java.util. * ; import friendIP. * ; import java.io. * ; import popumenu. * ; public class MyChatFrame extends JFrame ... { private int height=Toolkit.getDefaultToolkit().getScreenSize().height; private int widht=Toolkit.getDefaultToolkit().getScreenSize().width; private JMenuBar menubar; private JMenu menu1; private JMenu menu2; private JMenu menu3; private JMenu helpMenu; private JMenuItem menuItem1; private JMenuItem menuItem2; private JMenuItem menuItem3; private JMenuItem menuItem4; private JMenuItem menuItem5; private JMenuItem helpMenuItem; private JTextArea area1; private JTextArea area2; private JScrollPane scroll1; private JScrollPane scroll2; private JLabel label1; private JLabel label2; private JLabel label3; private JLabel label4; private JLabel label5; private JLabel label6; private JTextField textField1; private static JTextField textField2; private JTextField textField3; private JButton button1; private JButton button2; private Container contentPane; private TitledBorder titledBorder1; private TitledBorder titledBorder2; private TitledBorder titledBorder3; private TitledBorder titledBorder4; private TitledBorder titledBorder5; private TitledBorder titledBorder6; private TitledBorder titledBorder7; private TitledBorder titledBorder8; private JPanel panel; private JPanel panel1; private JPanel panel2; private JPanel panel3; private JPanel panel4; private FriendIP friend; private Popupmenu pop1=null; private Popupmenu pop2=null; private Popupmenu pop3=null; private Popupmenu pop11=null; private Popupmenu pop12=null; private Popupmenu pop13=null; private ChatSendSocket sendSocket; private ChatReceiveSocket receiveSocket; /** *//** * 构造函数 */ public MyChatFrame()...{ jbInit(); } /** *//** * 菜单,各种组件初始化 */ public void jbInit()...{ friend=null; menubar=new JMenuBar(); menu1=new JMenu("文件(F)"); menu1.setMnemonic(KeyEvent.VK_F); menuItem1=new JMenuItem("退出(X)"); menuItem1.setMnemonic(KeyEvent.VK_X); menuItem1.addActionListener(new ActionListener()...{ public void actionPerformed(ActionEvent e)...{ System.exit(0); } }); menu1.add(menuItem1); menu2=new JMenu("好友(Q)"); menu2.setMnemonic(KeyEvent.VK_Q); menuItem2=new JMenuItem("我的好友(M)"); menuItem2.setMnemonic(KeyEvent.VK_M); menuItem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M,InputEvent.CTRL_MASK)); /** *//** *好友菜单处理事件 */ menuItem2.addActionListener(new ActionListener()...{ public void actionPerformed(ActionEvent e)...{ friend=new FriendIP(); friend.setVisible(true); friend.validate(); } }); menu2.add(menuItem2); menu3=new JMenu("传送(W)"); menu3.setMnemonic(KeyEvent.VK_W); menuItem3=new JMenuItem("传送文件(B)"); menuItem3.setMnemonic(KeyEvent.VK_B); menuItem3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,InputEvent.CTRL_MASK)); /** *//** *文件菜单处理事件 */ menuItem3.addActionListener(new ActionListener()...{ public void actionPerformed(ActionEvent e)...{ String st=getFriendIP(); FileTransFrame frame=new FileTransFrame(st); } }); menu3.add(menuItem3); helpMenu=new JMenu("帮助(H)"); helpMenu.setMnemonic(KeyEvent.VK_H); helpMenuItem=new JMenuItem("帮助主题(H)"); helpMenuItem.setMnemonic(KeyEvent.VK_H); helpMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK)); helpMenuItem.addActionListener(new ActionListener()...{ public void actionPerformed(ActionEvent eee)...{ JOptionPane.showMessageDialog(null,"作者:李海峰时间:4/13/2008","我的聊天工具",JOptionPane.INFORMATION_MESSAGE); } }); helpMenu.add(helpMenuItem); menubar.add(menu1); menubar.add(menu2); menubar.add(menu3); menubar.add(helpMenu); area1=new JTextArea(5,10); area1.setEnabled(false); area1.setLineWrap(true); Font font1=new Font("宋体",Font.PLAIN,14); Color color=new Color(255,0,0); area1.setFont(font1); area1.setForeground(color); pop1=new Popupmenu(area1); pop1.addTextMenu(); area1.setComponentPopupMenu(pop1);; scroll1=new JScrollPane(area1); area2=new JTextArea(3,10); area2.setLineWrap(true); scroll2=new JScrollPane(area2); pop2=new Popupmenu(area2); pop2.addTextMenu(); area2.setComponentPopupMenu(pop2); Image image1=Toolkit.getDefaultToolkit().createImage("picture/fengjing.jpg"); ImageIcon icon=new ImageIcon(image1); label5=new JLabel(icon); Image image2=Toolkit.getDefaultToolkit().createImage("picture/hai.jpg"); ImageIcon icon1=new ImageIcon(image2); label6=new JLabel(icon1); label1=new JLabel("用户名"); label2=new JLabel("对方IP"); label3=new JLabel("本机IP"); label4=new JLabel(" 欢乐每一天 "); label4.setBackground(Color.black); textField1=new JTextField(); textField2=new JTextField(); textField3=new JTextField(); button1=new JButton("发送"); button1.addActionListener(new ActionListener()...{ public void actionPerformed(ActionEvent e)...{ String st=textField2.getText().trim(); char[] ch=new char[15]; st.getChars(0,st.length(),ch,0); int i=0; while(i<st.length())...{ if(!Character.isDigit(ch[i])&&ch[i]!='.') ...{ JOptionPane.showMessageDialog(null,"IP必须都为数字或者是正确的IP"."分割符","错误提示",JOptionPane.WARNING_MESSAGE); break; } i++; } String st1[] =st.split("/."); if(st1.length!=4)...{ JOptionPane.showMessageDialog(null,"请输入正确的IP地址格式为: XXX.XXX.XXX.XXX","错误IP",JOptionPane.WARNING_MESSAGE); } else if(Integer.parseInt(st1[0])<0||Integer.parseInt(st1[0])>223||Integer.parseInt(st1[1])<0||Integer.parseInt(st1[1])>255 ||Integer.parseInt(st1[2])<0||Integer.parseInt(st1[2])>255||Integer.parseInt(st1[3])<0||Integer.parseInt(st1[3])>255) JOptionPane.showMessageDialog(null,"输入的IP超出了应有的范围请确保每位IP在(0,255)范围内,第一位在(0,223)内","错误IP",JOptionPane.WARNING_MESSAGE); String username=getUserName(); String friendIP=getFriendIP(); String chatArea=getChatArea(); String hostIP=getHostIP(); sendSocket=new ChatSendSocket(username,friendIP,chatArea,hostIP); sendSocket.start();sendSocket.yield(); area2.setText(""); String str=sendSocket.getSendMessage(); String str1=getArea1()+" "+str; } }); button2=new JButton("清空"); button2.addActionListener(new ActionListener()...{ public void actionPerformed(ActionEvent e)...{ area2.setText(""); } }); titledBorder1=new TitledBorder(""); titledBorder2=new TitledBorder(""); titledBorder3=new TitledBorder(""); titledBorder4=new TitledBorder(""); titledBorder5=new TitledBorder(""); titledBorder6=new TitledBorder(""); titledBorder7=new TitledBorder(""); titledBorder8=new TitledBorder(""); panel=new JPanel(); panel.setBackground(Color.PINK); panel1=new JPanel(); panel1.setBackground(Color.lightGray); panel2=new JPanel(); panel2.setBackground(Color.MAGENTA); panel3=new JPanel(); panel3.setBackground(Color.MAGENTA); panel4=new JPanel(); panel4.setBackground(Color.MAGENTA); contentPane=this.getContentPane(); this.setTitle("聊天/文件传输"); this.setJMenuBar(menubar); this.setSize(513,460); this.setResizable(false); this.setLocation(widht/4,height/4); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); contentPane.setLayout(null); scroll1.setBounds(new Rectangle(8,0,282,200)); scroll1.setBorder(titledBorder3); label1.setBounds(new Rectangle(8,200,60,30)); label1.setBorder(titledBorder8); textField1.setBounds(new Rectangle(68,200,222,30)); textField1.setBorder(titledBorder8); textField1.setToolTipText("我的用户名"); pop11=new Popupmenu(textField1); pop11.addFieldMenu(); textField1.setComponentPopupMenu(pop11); label2.setBounds(new Rectangle(8,230,60,30)); label2.setBorder(titledBorder8); textField2.setBounds(new Rectangle(68,230,222,30)); textField2.setBorder(titledBorder8); textField2.setToolTipText("朋友的IP地址"); pop12=new Popupmenu(textField2); pop12.addFieldMenu(); textField2.setComponentPopupMenu(pop12); /** *//** * 验证输入的IP是否正确,符合规矩 */ textField2.addActionListener(new ActionListener()...{ public void actionPerformed(ActionEvent e)...{ String st=textField2.getText().trim(); char[] ch=new char[15]; st.getChars(0,st.length(),ch,0); int i=0; while(i<st.length())...{ if(!Character.isDigit(ch[i])&&ch[i]!='.') ...{ JOptionPane.showMessageDialog(null,"IP必须都为数字或者是正确的IP"."分割符","错误提示",JOptionPane.WARNING_MESSAGE); break; } i++; } String st1[] =st.split("/."); if(st1.length!=4)...{ JOptionPane.showMessageDialog(null,"请输入正确的IP地址格式为: XXX.XXX.XXX.XXX","错误IP",JOptionPane.WARNING_MESSAGE); } else if(Integer.parseInt(st1[0])<0||Integer.parseInt(st1[0])>223||Integer.parseInt(st1[1])<0||Integer.parseInt(st1[1])>255 ||Integer.parseInt(st1[2])<0||Integer.parseInt(st1[2])>255||Integer.parseInt(st1[3])<0||Integer.parseInt(st1[3])>255) JOptionPane.showMessageDialog(null,"输入的IP超出了应有的范围请确保每位IP在(0,255)范围内,第一位在(0,223)内","错误IP",JOptionPane.WARNING_MESSAGE); } }); scroll2.setBounds(new Rectangle(8,260,282,100)); scroll2.setBorder(titledBorder4); button1.setBorder(titledBorder1); button1.setBounds(new Rectangle(60,365,70,30)); button1.setToolTipText("发送信息给朋友"); button2.setBorder(titledBorder2); button2.setBounds(new Rectangle(170,365,70,30)); button2.setToolTipText("清空输入文本框的内容"); label3.setBounds(new Rectangle(300,0,60,30)); label3.setBorder(titledBorder8); textField3.setBounds(new Rectangle(360,0,140,30)); textField3.setBorder(titledBorder8); textField3.setEditable(false); textField3.setToolTipText("本机的IP地址"); pop13=new Popupmenu(textField3); pop13.addFieldMenu(); textField3.setComponentPopupMenu(pop13); label5.setBounds(new Rectangle(300,30,200,170)); label5.setBorder(titledBorder5); label4.setBounds(new Rectangle(300,200,200,30)); label4.setBorder(titledBorder6); label6.setBounds(new Rectangle(300,230,200,170)); label6.setBorder(titledBorder7); panel1.setBounds(new Rectangle(290,0,10,400)); panel2.setBounds(new Rectangle(0,0,5,455)); panel3.setBounds(new Rectangle(0,400,500,5)); panel4.setBounds(new Rectangle(500,0,5,405)); Image image=Toolkit.getDefaultToolkit().createImage("picture/goo.gif"); this.setIconImage(image); this.contentPane.add(scroll1); this.contentPane.add(scroll2); this.contentPane.add(label5); this.contentPane.add(label1); this.contentPane.add(label2); this.contentPane.add(label3); this.contentPane.add(textField1); this.contentPane.add(textField2); this.contentPane.add(textField3); this.contentPane.add(button1); this.contentPane.add(button2); this.contentPane.add(label6); this.contentPane.add(panel1); this.contentPane.add(label4); this.contentPane.add(panel2); this.contentPane.add(panel3); this.contentPane.add(panel4); this.setVisible(true); try...{ InetAddress add=InetAddress.getLocalHost(); setHostIP(add.getHostAddress()); } catch( UnknownHostException ee)...{ ee.printStackTrace(); } } /** *//** * 获得自己的用户名 */ public String getUserName()...{ String s2="your_friend"; String t1= textField1.getText().trim(); if(t1.length()==0) return s2; else return t1; } /** *//** * 获得输入朋友的IP,并且对系统存储的朋友IP进行 *比较,如果有就不做任何处理,没有就增加到里面! *调用的是FriendIP这个类的成员函数! */ public String getFriendIP()...{ String st=textField2.getText().trim(); if(friend!=null)...{ ArrayList<String> array=friend.getData(); int m=0; for(m=0;m<array.size();m++)...{ if(array.get(m).trim().equals(st)) ...{ break; } } if(m==array.size()) ...{ array.add(st); friend.setData(array); } else friend.setData(array); } else...{ friend=new FriendIP(); ArrayList<String> array1=friend.getData(); int m=0; for(m=0;m<array1.size();m++)...{ if(array1.get(m).trim().equals(st)) ...{ break; } } if(m==array1.size()) ...{ array1.add(st); friend.setData(array1); } else friend.setData(array1); } return st; } /** *//** * 输入朋友的IP */ public static void setFriendIP(String str)...{ textField2.setText(str.trim()); } /** *//** * 获得输入的聊天信息 */ public String getChatArea()...{ return area2.getText(); } /** *//** * 获得本机的IP */ public String getHostIP()...{ return textField3.getText().trim(); } /** *//** * 设定本机的IP到窗口主机IP对应的位置 */ public void setHostIP(String ip)...{ textField3.setText(ip); } /** *//** * 获得输入过的信息 */ public String getArea1()...{ return area1.getText(); } /** *//** * 处理输入过的信息 */ public void setArea1(String st)...{ area1.setText(st); }}