📄 ipassignfrm.java~182~
字号:
package tsinghuaip;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import com.borland.jbcl.layout.*;
import javax.swing.border.*;
import java.util.*;
import java.math.*;
public class IPAssignFrm extends JFrame {
JPanel contentPane;
XYLayout xYLayout1 = new XYLayout();
DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
TableColumn column = new TableColumn();
JTableHeader tableHeader = new JTableHeader(columnModel);
IPInfoDataModel ipInfoDataModal = new IPInfoDataModel();
JTable jTable1 = new JTable(ipInfoDataModal);
JLabel jLabel1 = new JLabel();
JButton queryButton = new JButton();
JButton exitButton = new JButton();
JFormattedTextField IPAddrTextField = new JFormattedTextField();
TitledBorder titledBorder1;
TitledBorder titledBorder2;
TitledBorder titledBorder3;
JLabel jLabel2 = new JLabel();
//Construct the frame
public IPAssignFrm() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
IPInfoInit(); // some initialization about IP info
jbInit();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
}
catch (Exception e) {
e.printStackTrace();
}
}
private void IPInfoInit() throws Exception {
IPInfoToDB iPInfoToDB = new IPInfoToDB();
iPInfoToDB.SetTxtFileName("TsinghuaIPAssign.txt");
iPInfoToDB.SaveIPToDB();
//GenXML genXML = new GenXML();
//genXML.SetXmlFileName("TsinghuaIPAssign.xml");
//genXML.SaveIPFromDB();
}
//Component initialization
private void jbInit() throws Exception {
contentPane = (JPanel)this.getContentPane();
titledBorder1 = new TitledBorder("");
titledBorder2 = new TitledBorder("");
titledBorder3 = new TitledBorder("");
contentPane.setMaximumSize(new Dimension(480, 400));
contentPane.setMinimumSize(new Dimension(480, 400));
contentPane.setOpaque(true);
contentPane.setPreferredSize(new Dimension(480, 400));
contentPane.setLayout(xYLayout1);
this.setContentPane(contentPane);
this.setDefaultCloseOperation(HIDE_ON_CLOSE);
this.setSize(new Dimension(550, 400));
this.setTitle("清华大学IP地址分布查询器(野人制作)");
jTable1.setBackground(new Color(149, 165, 182));
jTable1.setToolTipText("清华大学IP地址分配表");
jTable1.setRowHeight(25);
jTable1.setRowMargin(3);
jLabel1.setFont(new java.awt.Font("Dialog", 0, 15));
jLabel1.setRequestFocusEnabled(false);
jLabel1.setText("请出入待查询的IP地址:");
queryButton.setFont(new java.awt.Font("DialogInput", 1, 16));
queryButton.setText("开始查询");
queryButton.addActionListener(new IPAssignFrm_queryButton_actionAdapter(this));
IPAddrTextField.setBackground(Color.white);
IPAddrTextField.setBorder(BorderFactory.createEtchedBorder());
IPAddrTextField.setHorizontalAlignment(SwingConstants.CENTER);
IPAddrTextField.setText("");
jLabel2.setFont(new java.awt.Font("Monospaced", 0, 13));
jLabel2.setForeground(Color.darkGray);
jLabel2.setToolTipText("");
jLabel2.setText("Savage制作@CopyRight 2003-2010...");
JScrollPane scrollpane = JTable.createScrollPaneForTable(jTable1);
exitButton.addActionListener(new IPAssignFrm_exitButton_actionAdapter(this));
exitButton.setText("退出系统");
exitButton.addActionListener(new IPAssignFrm_exitButton_actionAdapter(this));
exitButton.setFont(new java.awt.Font("DialogInput", 1, 16));
contentPane.add(scrollpane, new XYConstraints(16, 22, 510, 202));
contentPane.add(jLabel1, new XYConstraints(30, 249, 167, 37));
contentPane.add(IPAddrTextField, new XYConstraints(214, 250, 152, 34));
contentPane.add(jLabel2, new XYConstraints(114, 357, 288, -1));
contentPane.add(exitButton, new XYConstraints(312, 301, 136, 31));
contentPane.add(queryButton, new XYConstraints(66, 299, 136, 31));
}
//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
void queryButton_actionPerformed(ActionEvent e) {
String strIP = IPAddrTextField.getText();
if (strIP.trim().length() == 0) {
JOptionPane anOptionPane = new JOptionPane(); //弹出对话框
anOptionPane.showMessageDialog(this, "请输入待查询得IP地址!", "输入提示",
JOptionPane.ERROR_MESSAGE);
return;
}
QueryIP(strIP);
}
/**********************************************
这个函数的作用就是查询输入的IP地址
**********************************************/
private void QueryIP(String strIP) {
strIP = strIP.trim();
String strResult;
//检查IP地址格式
if (CheckIPFormat(strIP) == false) {
strResult = "对不起,IP地址输入错误!";
JOptionPane anOptionPane = new JOptionPane(); //弹出对话框
anOptionPane.showMessageDialog(this, strResult, "IP地址输入格式错误",
JOptionPane.ERROR_MESSAGE);
return;
}
//将IP地址字符串中的'.'去掉
strIP = IngnoreIPDot(strIP);
//将去掉'.'的IP地址字符串转换为长整数
BigInteger bigIntIP = StringToBigInt(strIP);
//查找IP地址所属单位
strResult = CheckIPInList(bigIntIP);
JOptionPane anOptionPane = new JOptionPane(); //弹出对话框
anOptionPane.showMessageDialog(this, strResult, "查询结果",
JOptionPane.PLAIN_MESSAGE);
}
/**********************************************
这个函数的作用就是检查输入的IP地址的格式是否正确
**********************************************/
private boolean CheckIPFormat(String strIP) {
int intLen = strIP.length();
int index = 0;
if (strIP.length() > 15)
return false;
while (index < intLen) {
if ( ( (strIP.charAt(index) >= '0') && (strIP.charAt(index) <= '9'))
|| (strIP.charAt(index) == '.')) {
index++;
}
else
break;
}
if (index < intLen)
return false;
return true;
}
/********************************************************
这个函数的作用就是将IP地址中间的‘.’去掉将其连成一纯数字字符串
*********************************************************/
private String IngnoreIPDot(String strIP) {
String strTmp = new String("");
strIP = strIP.trim();
StringTokenizer token = new StringTokenizer(strIP, ".");
while (token.hasMoreElements()) {
strTmp = strTmp.concat( (String) token.nextElement());
}
return strTmp;
}
/**********************************************
这个函数的作用就是将数字字符串转换为长整数
**********************************************/
private BigInteger StringToBigInt(String strIP) {
return new BigInteger(strIP);
}
/**********************************************
这个函数的作用就是在已有IP地址列表中查找此IP地址,如果
找到就返回该IP地址的所属单位,如果找不到就报错
**********************************************/
public String CheckIPInList(BigInteger bigIntIP) {
SAXParseIPInfo parseIPInfo = new SAXParseIPInfo();
try {
parseIPInfo.ParseIPInfo();
}
catch (Exception e) {
e.printStackTrace();
}
Vector startIPVector = parseIPInfo.GetStartIPVector();
Vector endIPVector = parseIPInfo.GetEndIPVector();
Vector localVector = parseIPInfo.GetLocalVector();
int intLen = endIPVector.size();
for (int i = 1; i < intLen; i++) {
BigInteger bigIntStartIP = StringToBigInt(
IngnoreIPDot( (String) startIPVector.elementAt(i)));
BigInteger bigIntEndIP = StringToBigInt(
IngnoreIPDot( (String) endIPVector.elementAt(i)));
if ( ( (bigIntIP.compareTo(bigIntStartIP) == 1) &&
(bigIntIP.compareTo(bigIntEndIP) == -1))
|| (bigIntIP.compareTo(bigIntStartIP) == 0)
|| (bigIntIP.compareTo(bigIntEndIP) == 0)) {
String strResult = "此IP属于";
strResult = strResult.concat( (String) localVector.elementAt(i));
return strResult;
}
}
return "对不起,此IP不属于清华大学!";
}
void exitButton_actionPerformed(ActionEvent e) {
System.exit(0);
}
}
class IPAssignFrm_queryButton_actionAdapter implements java.awt.event.
ActionListener {
IPAssignFrm adaptee;
IPAssignFrm_queryButton_actionAdapter(IPAssignFrm adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.queryButton_actionPerformed(e);
}
}
class IPInfoDataModel extends AbstractTableModel {
private Object[][] arrIPInfo;
private Vector startIPVector;
private Vector endIPVector;
private Vector localVector;
public IPInfoDataModel() {
SAXParseIPInfo parseIPInfo = new SAXParseIPInfo();
try {
parseIPInfo.ParseIPInfo();
}
catch (Exception e) {
e.printStackTrace();
}
startIPVector = parseIPInfo.GetStartIPVector();
endIPVector = parseIPInfo.GetEndIPVector();
localVector = parseIPInfo.GetLocalVector();
int intLen = startIPVector.size();
arrIPInfo = new Object[intLen][3];
for (int i = 0; i < intLen; i++) {
arrIPInfo[i] = new Object[3];
}
for (int m = 0; m < intLen-1; m++) {
//System.out.print(m);
arrIPInfo[m][0] = startIPVector.elementAt(m);
arrIPInfo[m][1] = endIPVector.elementAt(m);
arrIPInfo[m][2] = localVector.elementAt(m);
}
}
public int getColumnCount() {
return arrIPInfo[0].length;
}
public int getRowCount() {
return arrIPInfo.length;
}
public Object getValueAt(int row, int col) {
return arrIPInfo[row][col];
}
public boolean isCellEditable(int row, int col) {
return false;
}
}
class IPAssignFrm_exitButton_actionAdapter implements java.awt.event.
ActionListener {
IPAssignFrm adaptee;
IPAssignFrm_exitButton_actionAdapter(IPAssignFrm adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.exitButton_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -