IPAssignFrm.java~180~
上传用户:liming9091
上传日期:2014-10-27
资源大小:3376k
文件大小:11k
源码类别:

Java编程

开发平台:

Java

  1. package tsinghuaip;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import javax.swing.table.*;
  6. import javax.swing.event.*;
  7. import com.borland.jbcl.layout.*;
  8. import javax.swing.border.*;
  9. import java.util.*;
  10. import java.math.*;
  11. public class IPAssignFrm extends JFrame {
  12.     JPanel contentPane;
  13.     XYLayout xYLayout1 = new XYLayout();
  14.     DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
  15.     TableColumn column = new TableColumn();
  16.     JTableHeader tableHeader = new JTableHeader(columnModel);
  17.     IPInfoDataModel ipInfoDataModal = new IPInfoDataModel();
  18.     JTable jTable1 = new JTable(ipInfoDataModal);
  19.     JLabel jLabel1 = new JLabel();
  20.     JButton queryButton = new JButton();
  21.     JButton exitButton = new JButton();
  22.     JFormattedTextField IPAddrTextField = new JFormattedTextField();
  23.     TitledBorder titledBorder1;
  24.     TitledBorder titledBorder2;
  25.     TitledBorder titledBorder3;
  26.     JLabel jLabel2 = new JLabel();
  27.     //Construct the frame
  28.     public IPAssignFrm() {
  29.         enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  30.         try {
  31.             IPInfoInit(); // some initialization about IP info
  32.             jbInit();
  33.             addWindowListener(new WindowAdapter() {
  34.                 public void windowClosing(WindowEvent e) {
  35.                     dispose();
  36.                 }
  37.             });
  38.         }
  39.         catch (Exception e) {
  40.             e.printStackTrace();
  41.         }
  42.     }
  43.     private void IPInfoInit() throws Exception{
  44.         IPInfoToDB iPInfoToDB = new IPInfoToDB();
  45.         iPInfoToDB.SetTxtFileName("TsinghuaIPAssign.txt");
  46.         iPInfoToDB.SaveIPToDB();
  47.         //GenXML genXML = new GenXML();
  48.         //genXML.SetXmlFileName("TsinghuaIPAssign.xml");
  49.         //genXML.SaveIPFromDB();
  50.     }
  51.     //Component initialization
  52.     private void jbInit() throws Exception {
  53.         contentPane = (JPanel)this.getContentPane();
  54.         titledBorder1 = new TitledBorder("");
  55.         titledBorder2 = new TitledBorder("");
  56.         titledBorder3 = new TitledBorder("");
  57.         contentPane.setMaximumSize(new Dimension(480, 400));
  58.         contentPane.setMinimumSize(new Dimension(480, 400));
  59.         contentPane.setOpaque(true);
  60.         contentPane.setPreferredSize(new Dimension(480, 400));
  61.         contentPane.setLayout(xYLayout1);
  62.         this.setContentPane(contentPane);
  63.         this.setDefaultCloseOperation(HIDE_ON_CLOSE);
  64.         this.setSize(new Dimension(550, 400));
  65.         this.setTitle("清华大学IP地址分布查询器(野人制作)");
  66.         jTable1.setBackground(new Color(149, 165, 182));
  67.         jTable1.setToolTipText("清华大学IP地址分配表");
  68.         jTable1.setRowHeight(25);
  69.         jTable1.setRowMargin(3);
  70.         jLabel1.setFont(new java.awt.Font("Dialog", 0, 15));
  71.         jLabel1.setRequestFocusEnabled(false);
  72.         jLabel1.setText("请出入待查询的IP地址:");
  73.         queryButton.setFont(new java.awt.Font("DialogInput", 1, 16));
  74.         queryButton.setText("开始查询");
  75.         queryButton.addActionListener(new IPAssignFrm_queryButton_actionAdapter(this));
  76.         IPAddrTextField.setBackground(Color.white);
  77.         IPAddrTextField.setBorder(BorderFactory.createEtchedBorder());
  78.         IPAddrTextField.setHorizontalAlignment(SwingConstants.CENTER);
  79.         IPAddrTextField.setText("");
  80.         jLabel2.setFont(new java.awt.Font("Monospaced", 0, 13));
  81.         jLabel2.setForeground(Color.darkGray);
  82.         jLabel2.setToolTipText("");
  83.         jLabel2.setText("Savage制作@CopyRight 2003-2010...");
  84.         JScrollPane scrollpane = JTable.createScrollPaneForTable(jTable1);
  85.         exitButton.addActionListener(new IPAssignFrm_exitButton_actionAdapter(this));
  86.         exitButton.setText("退出系统");
  87.         exitButton.addActionListener(new IPAssignFrm_exitButton_actionAdapter(this));
  88.         exitButton.setFont(new java.awt.Font("DialogInput", 1, 16));
  89.         contentPane.add(scrollpane, new XYConstraints(16, 22, 510, 202));
  90.         contentPane.add(jLabel1, new XYConstraints(30, 249, 167, 37));
  91.         contentPane.add(IPAddrTextField, new XYConstraints(214, 250, 152, 34));
  92.         contentPane.add(jLabel2, new XYConstraints(114, 357, 288, -1));
  93.         contentPane.add(exitButton, new XYConstraints(312, 301, 136, 31));
  94.         contentPane.add(queryButton, new XYConstraints(66, 299, 136, 31));
  95.     }
  96.     //Overridden so we can exit when window is closed
  97.     protected void processWindowEvent(WindowEvent e) {
  98.         super.processWindowEvent(e);
  99.         if (e.getID() == WindowEvent.WINDOW_CLOSING) {
  100.             System.exit(0);
  101.         }
  102.     }
  103.     void queryButton_actionPerformed(ActionEvent e) {
  104.         String strIP = IPAddrTextField.getText();
  105.         if (strIP.trim().length() == 0)
  106.         {
  107.             JOptionPane anOptionPane = new JOptionPane(); //弹出对话框
  108.             anOptionPane.showMessageDialog(this, "请输入待查询得IP地址!", "输入提示",
  109.                                JOptionPane.ERROR_MESSAGE);
  110.             return;
  111.         }
  112.         QueryIP(strIP);
  113.     }
  114.     /**********************************************
  115.      这个函数的作用就是查询输入的IP地址
  116.      **********************************************/
  117.     private void QueryIP(String strIP) {
  118.         strIP = strIP.trim();
  119.         String strResult;
  120.         //检查IP地址格式
  121.         if (CheckIPFormat(strIP) == false) {
  122.             strResult = "对不起,IP地址输入错误!";
  123.             JOptionPane anOptionPane = new JOptionPane(); //弹出对话框
  124.             anOptionPane.showMessageDialog(this, strResult, "IP地址输入格式错误",
  125.                                            JOptionPane.ERROR_MESSAGE);
  126.             return;
  127.         }
  128.         //将IP地址字符串中的'.'去掉
  129.         strIP = IngnoreIPDot(strIP);
  130.         //将去掉'.'的IP地址字符串转换为长整数
  131.         BigInteger bigIntIP = StringToBigInt(strIP);
  132.         //查找IP地址所属单位
  133.         strResult = CheckIPInList(bigIntIP);
  134.         JOptionPane anOptionPane = new JOptionPane(); //弹出对话框
  135.         anOptionPane.showMessageDialog(this, strResult, "查询结果",
  136.                                        JOptionPane.PLAIN_MESSAGE);
  137.     }
  138.     /**********************************************
  139.      这个函数的作用就是检查输入的IP地址的格式是否正确
  140.      **********************************************/
  141.     private boolean CheckIPFormat(String strIP) {
  142.         int intLen = strIP.length();
  143.         int index = 0;
  144.         if (strIP.length() > 15)
  145.             return false;
  146.         while (index < intLen) {
  147.             if ( ( (strIP.charAt(index) >= '0') && (strIP.charAt(index) <= '9'))
  148.                 || (strIP.charAt(index) == '.')) {
  149.                 index++;
  150.             }
  151.             else
  152.                 break;
  153.         }
  154.         if (index < intLen)
  155.             return false;
  156.         return true;
  157.     }
  158.     /********************************************************
  159.      这个函数的作用就是将IP地址中间的‘.’去掉将其连成一纯数字字符串
  160.      *********************************************************/
  161.     private String IngnoreIPDot(String strIP) {
  162.         String strTmp = new String("");
  163.         strIP = strIP.trim();
  164.         StringTokenizer token = new StringTokenizer(strIP, ".");
  165.         while (token.hasMoreElements()) {
  166.             strTmp = strTmp.concat( (String) token.nextElement());
  167.         }
  168.         return strTmp;
  169.     }
  170.     /**********************************************
  171.          这个函数的作用就是将数字字符串转换为长整数
  172.      **********************************************/
  173.     private BigInteger StringToBigInt(String strIP) {
  174.         return new BigInteger(strIP);
  175.     }
  176.     /**********************************************
  177.          这个函数的作用就是在已有IP地址列表中查找此IP地址,如果
  178.          找到就返回该IP地址的所属单位,如果找不到就报错
  179.      **********************************************/
  180.     public String CheckIPInList(BigInteger bigIntIP) {
  181.         SAXParseIPInfo parseIPInfo = new SAXParseIPInfo();
  182.         try {
  183.             parseIPInfo.ParseIPInfo();
  184.         }
  185.         catch (Exception e) {
  186.             e.printStackTrace();
  187.         }
  188.         Vector startIPVector = parseIPInfo.GetStartIPVector();
  189.         Vector endIPVector = parseIPInfo.GetEndIPVector();
  190.         Vector localVector = parseIPInfo.GetLocalVector();
  191.         int intLen = endIPVector.size();
  192.         for (int i = 1; i < intLen; i++) {
  193.             BigInteger bigIntStartIP = StringToBigInt(
  194.                 IngnoreIPDot( (String) startIPVector.elementAt(i)));
  195.             BigInteger bigIntEndIP = StringToBigInt(
  196.                 IngnoreIPDot( (String) endIPVector.elementAt(i)));
  197.             if ( ( (bigIntIP.compareTo(bigIntStartIP) == 1) &&
  198.                   (bigIntIP.compareTo(bigIntEndIP) == -1))
  199.                 || (bigIntIP.compareTo(bigIntStartIP) == 0)
  200.                 || (bigIntIP.compareTo(bigIntEndIP) == 0)) {
  201.                 String strResult = "此IP属于";
  202.                 strResult = strResult.concat( (String) localVector.elementAt(i));
  203.                 return strResult;
  204.             }
  205.         }
  206.         return "对不起,此IP不属于清华大学!";
  207.     }
  208.     void exitButton_actionPerformed(ActionEvent e) {
  209.         System.exit(0);
  210.     }
  211. }
  212. class IPAssignFrm_queryButton_actionAdapter implements java.awt.event.
  213.     ActionListener {
  214.     IPAssignFrm adaptee;
  215.     IPAssignFrm_queryButton_actionAdapter(IPAssignFrm adaptee) {
  216.         this.adaptee = adaptee;
  217.     }
  218.     public void actionPerformed(ActionEvent e) {
  219.         adaptee.queryButton_actionPerformed(e);
  220.     }
  221. }
  222. class IPInfoDataModel extends AbstractTableModel {
  223.     private Object[][] arrIPInfo;
  224.     private Vector startIPVector;
  225.     private Vector endIPVector;
  226.     private Vector localVector;
  227.     public IPInfoDataModel() {
  228.         SAXParseIPInfo parseIPInfo = new SAXParseIPInfo();
  229.         try {
  230.             parseIPInfo.ParseIPInfo();
  231.         }
  232.         catch (Exception e) {
  233.             e.printStackTrace();
  234.         }
  235.         startIPVector = parseIPInfo.GetStartIPVector();
  236.         endIPVector = parseIPInfo.GetEndIPVector();
  237.         localVector = parseIPInfo.GetLocalVector();
  238.         int intLen = startIPVector.size();
  239.         arrIPInfo = new Object[intLen][3];
  240.         for (int i = 0; i < intLen; i++) {
  241.             arrIPInfo[i] = new Object[3];
  242.         }
  243.             for (int m = 0; m < intLen; m++) {
  244.                 //System.out.print(m);
  245.                 arrIPInfo[m][0] = startIPVector.elementAt(m);
  246.                 arrIPInfo[m][1] = endIPVector.elementAt(m);
  247.                 arrIPInfo[m][2] = localVector.elementAt(m);
  248.             }
  249.     }
  250.     public int getColumnCount() {
  251.         return arrIPInfo[0].length;
  252.     }
  253.     public int getRowCount() {
  254.         return arrIPInfo.length;
  255.     }
  256.     public Object getValueAt(int row, int col) {
  257.         return arrIPInfo[row][col];
  258.     }
  259.     public boolean isCellEditable(int row, int col) {
  260.         return false;
  261.     }
  262. }
  263. class IPAssignFrm_exitButton_actionAdapter implements java.awt.event.
  264.     ActionListener {
  265.     IPAssignFrm adaptee;
  266.     IPAssignFrm_exitButton_actionAdapter(IPAssignFrm adaptee) {
  267.         this.adaptee = adaptee;
  268.     }
  269.     public void actionPerformed(ActionEvent e) {
  270.         adaptee.exitButton_actionPerformed(e);
  271.     }
  272. }