JDBC实例之—手机号码归属地查询(GUI版本)

JDBC实例之—手机号码归属地查询(GUI版本)

    上一节完成了控制台版本,下面实现了GUI版本,GUI采用swing实现,自已找资料看了一下,看了常见的几个控件,入门还算简单,本例中用到JFrame,JButton,JTextField,JLabel这四个,他们的用法也很简单。

    GUI版本完成了一些细节处理:
    1.电话号码至少要输入7位,否则提示错误。输入超过7位时截取前7位放到数据库中查询。
    2.文本输入框只能输入数字,不能输入其它字符,否则会发出系统错误提示音,并且输入不显示(输出不成功)。这部分靠TextField加入按键监听机制实现。
    3.GUI界面窗体默认要显示在屏幕中央。
    4.可以点击按钮查询结果,也可以输入完成后回册直接出结果,出完结果后要自动清空输入框,并且光标自动定位,输错还要能退格。
    5.显示系统时间,这用到前面学到的Date类,把当前系统的时间,实时显示到Label标签上。

   效果如下:




    GUI部分有个Toolkit类可以获得系统屏幕信息,这样结合JFrame大小可以设置JFrame控件显示位置,在本例中,封装成GuiUtils.java,工具类!方法要声明为静态哦。
    代码如下:
public static void setFrameCenter(JFrame jf)
	{
		//获取电脑屏幕分辨率
		Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension d = tk.getScreenSize();
		
		//获取中心坐标
		int width  = (int)(d.getWidth()  - jf.getWidth() ) /2;
		int height = (int)(d.getHeight() - jf.getHeight()) /2;
		
		//设置JFrame显示坐标
		jf.setLocation(width, height);
	}


主程序代码:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;

import javax.swing.*;

/**
 *  号码查询类,完成数据库连接的创建,查询,遍历比较,结果返回
 * 
 * 
 * */
class Query{
	
	//SQL查询语句
	private  String sql = "Select * from T_PhoneNumber";
	
	//创建数据库连接
	private  Connection conn 	  = null;
	private  PreparedStatement ps = null;
	private  ResultSet rs 		  = null;
	
	//输出
	private  String strPhoneNumber = null;
	private  String strArea = null;			//输出号码归属地
	private  String strMobileType = null;	//输出运营商类型
	
	
	//号码查询方法封装
	public  String phoneNumberQuery(String phoneNumber) throws SQLException
	{
		try
		{
    		conn = JdbcUtils.getConnection();	//获得连接
    		ps   = conn.prepareStatement(sql);	//获得预编译的 SQL语句的对象
    		rs   = ps.executeQuery();			//获得查询结果集
    		
    		//变量归零
    		strArea       = null;
    		strMobileType = null;
    		rs.first();				//将结果集返回到第一行
    		
    		//从第一行开始遍历直到查询成功,或者遍历到最后一行
    		while(rs.next())
    		{
    			//从数据库查询结果集中获取电话号码前7位
    			strPhoneNumber = rs.getString("PhonePrefix");
    			//逐条和输入电话号码进行比较
    			if(strPhoneNumber.equals(phoneNumber))
    			{
    				//查询成功,获取地区和运营商类型字段
    				strArea = rs.getString("Area");
    				strMobileType = rs.getString("MobileType");
    				//退出遍历
    				break;
    			}
    		}
    		//如果查旬结果为空
    		if(strArea == null && strMobileType == null)
    		{
    			System.out.println("查询结果为空");
    			return null;
    		}
    		else
    		{
    			//查询成功返回结果
    			return strArea + "   " + strMobileType;	
    		}
		}
		catch(SQLException e)
		{
			 e.printStackTrace();
			 
			 return null;
		}
		finally
		{
			//资源关闭
			JdbcUtils.closeQuietly(rs);
			JdbcUtils.closeQuietly(ps);
			JdbcUtils.closeQuietly(conn);
		}		
	}			
}

/**
 * 	主程序类,完成GUI界面类的调用,查询类的调用,信息的输出显示
 * */
public class PhoneNumberQuery
{

	public static void main(String[] args) throws SQLException
	{		
		//创建主界面
		GuiView gui = new GuiView();
		
		//创建查询对像
		Query query = new Query();
		
		//日期时间显示格式(Date, SimpleDateFormat类)
		SimpleDateFormat dt = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		
		String inPhoneNumber = null;	//输入的电话号码
		
		String resInfo = null;			//返回的查询结果信息
		
		while(true)
		{
			Date t = new Date();			//获得当前的系统时间
			gui.setDateTime(dt.format(t));	//格式化输出然后设置label标签
			
			//循环查询输入的电话号码
			inPhoneNumber = gui.getPhoneNumber();				
			
			//输入不为空
			if(inPhoneNumber != null)
			{
				//打印调试
				System.out.println(inPhoneNumber);

				//输入电主号码至少要为7位
				if(inPhoneNumber.length() >= 7)
				{
					//提取前7位
					inPhoneNumber = inPhoneNumber.substring(0, 7);
				
					//清空textField
					gui.clearPhoneNumber();	
					
					//查询
					resInfo = query.phoneNumberQuery(inPhoneNumber);
					
					//查旬结果
					gui.showMessage(resInfo);    				
				}
				else
				{
					//输入号码少于7位
					gui.showMessageError();
				}
			}	
		}
	}
}

界面实现代码:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;

/**
 * 	号码归属地查询界面创建类
 * 
 * */
public class GuiView 
{
	private JFrame mainJFrame = new JFrame("号码归属地查询");
	private JTextField textField = new JTextField(15);
	private JButton button = new JButton("查询");
	private JLabel label   = new JLabel("时间:2015年6月21日  22:06:00",SwingConstants.LEFT);
	private JPanel panel_1 = new JPanel();
	private JPanel panel_2 = new JPanel();

	
	//系统标志变量
	private boolean buttonFlag = false;
	
	//构造函数
	public GuiView()
	{
		//设置窗体大小
		mainJFrame.setSize(300, 150);
		
		//设置JFrame居中
		GuiUtils.setFrameCenter(mainJFrame);
		
		
		//设置panel_1布局管理器
		panel_1.setLayout(new FlowLayout());
		
		//panel_1添加组件
		panel_1.add(textField);
		panel_1.add(button);
		mainJFrame.add(panel_1);
		
		//panel_2添加组件
		panel_2.add(label);
		
		//mainJFrame添加组件
		mainJFrame.setLayout(new BorderLayout());
		mainJFrame.add(panel_1,BorderLayout.NORTH);
		mainJFrame.add(panel_2,BorderLayout.CENTER);
		
		//设置Frame支持关闭
		mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置Frame可见
		mainJFrame.setVisible(true);
		 
		//给button添加事件监听机制
		button.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent e)
			{
				if(buttonFlag == false)
				{
					buttonFlag = true;
				}				
			}
		});	
		
		//给textField添加按键监听机制
		textField.addKeyListener(new KeyAdapter(){
		
			@Override
			public void keyTyped(KeyEvent e)
			{			
				int ch = e.getKeyChar();
				
				//输入是回册,则和按钮按下效果一样
				if( ch == KeyEvent.VK_ENTER)
				{
					if(buttonFlag == false)
					{
						buttonFlag = true;
					}	
				}
				//如果是退格键
				else if(ch == KeyEvent.VK_BACK_SPACE)
				{
					String str = textField.getText();
					str = str.substring(0, str.length());
					textField.setText(str);
				}
				//输入是数字则限定为0-9
				else if( !(ch >= KeyEvent.VK_0 && ch <= KeyEvent.VK_9))
				{		
					Toolkit.getDefaultToolkit().beep();
					//e.setKeyChar('\0');
					e.consume();
				}
			}
		});
	}
	
	//设置Label显示系统时间
	public void setDateTime(String text)
	{
		label.setText(text);
	}
	
	//获取输入的电话号码
	public String getPhoneNumber()
	{
		if(buttonFlag == true)			//查询按钮按下
		{
			buttonFlag = false;
			return textField.getText();
		}
		else 
		{
			return null;
		}
	}
	
	//清空输入的电话号码,然后获取focus
	public void clearPhoneNumber()
	{
		textField.setText("");
		textField.requestFocus(); //获取光标
	}
	
	//显示查询结果
	public void showMessage(String text)
	{
		if(text == null)
		{
			JOptionPane.showMessageDialog(mainJFrame, "   未知号码        ", "查询结果", JOptionPane.INFORMATION_MESSAGE);
		}
		else
		{
			JOptionPane.showMessageDialog(mainJFrame, text, "查询结果", JOptionPane.INFORMATION_MESSAGE);
		}
	}
	
	//显示错误信息
	public void showMessageError()
	{
		JOptionPane.showMessageDialog(mainJFrame, "电话号码不能少于7位!", "查询结果", JOptionPane.ERROR_MESSAGE);
	}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值