Welcome

首页 / 软件开发 / JAVA / 查找程序的GUI版本

查找程序的GUI版本2007-05-29 yycnet.yeah.net yyc译最好的方法是让查找程序一直保持运行,要查找什么东西时只需简单地切换到它,并键入要查找的名字即可。下面这个程序将查找程序作为一个“application/applet”创建,且添加了名字自动填写功能,所以不必键入完整的姓,即可看到数据:

//: VLookup.java// GUI version of Lookup.javaimport java.awt.*;import java.awt.event.*;import java.applet.*;import java.sql.*;public class VLookup extends Applet {String dbUrl = "jdbc:odbc:people";String user = "";String password = "";Statement s;TextField searchFor = new TextField(20);Label completion = new Label("");TextArea results = new TextArea(40, 20);public void init() {searchFor.addTextListener(new SearchForL());Panel p = new Panel();p.add(new Label("Last name to search for:"));p.add(searchFor);p.add(completion);setLayout(new BorderLayout());add(p, BorderLayout.NORTH);add(results, BorderLayout.CENTER);try {// Load the driver (registers itself)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection c = DriverManager.getConnection(dbUrl, user, password);s = c.createStatement();} catch(Exception e) {results.setText(e.getMessage());}}class SearchForL implements TextListener {public void textValueChanged(TextEvent te) {ResultSet r;if(searchFor.getText().length() == 0) {completion.setText("");results.setText("");return;}try {// Name completion:r = s.executeQuery("SELECT LAST FROM people.csv people " +"WHERE (LAST Like "" +searchFor.getText()+ "%") ORDER BY LAST");if(r.next()) completion.setText(r.getString("last"));r = s.executeQuery("SELECT FIRST, LAST, EMAIL " +"FROM people.csv people " +"WHERE (LAST="" + completion.getText() +"") AND (EMAIL Is Not Null) " +"ORDER BY FIRST");} catch(Exception e) {results.setText(searchFor.getText() + "
");results.append(e.getMessage());return; }results.setText("");try {while(r.next()) {results.append(r.getString("Last") + ", " + r.getString("fIRST") + ": " + r.getString("EMAIL") + "
");}} catch(Exception e) {results.setText(e.getMessage());}}}public static void main(String[] args) {VLookup applet = new VLookup();Frame aFrame = new Frame("Email lookup");aFrame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});aFrame.add(applet, BorderLayout.CENTER);aFrame.setSize(500,200);applet.init();applet.start();aFrame.setVisible(true);}} ///:~
数据库的许多逻辑都是相同的,但大家可看到这里添加了一个TextListener,用于监视在TextField(文本字段)的输入。所以只要键入一个新字符,它首先就会试着查找数据库中的“姓”,并显示出与当前输入相符的第一条记录(将其置入completion Label,并用它作为要查找的文本)。因此,只要我们键入了足够的字符,使程序能找到与之相符的唯一一条记录,就可以停手了。