在盘中写入一个文件,里面写个 
姓名 班别 学号  年龄
张三 3     01    15
李氏 4    02    16
王五  5   03    17
怎样用个窗体界面 实现在文本框中输入名字就能查询出该人得这一行数据在文本域中显示?

解决方案 »

  1.   

    //一开始把文件读到一个map中
    Map<String, String> map = new HashMap<String, String>();
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("xxx.txt")));
    String buf;
    while ((buf=br.readLine()) != null) {
        map.put(buf.split("\\s+")[0], buf);
    }
    br.close();//然后在查询按钮事件中
    String name = jtextfield.getText(); //获得输入框的数据
    String data = "data not found"; 
    if (map.containsKey(name)) { //查看是否存在数据
        data = map.get(name);
    }
    jtextarea.setText(data); //在文本域显示数据基本上核心代码就是这些了,剩下来的画面的代码,LZ自己去完成吧
      

  2.   

    请问map.put(buf.split("\\s+")[0], buf);
    什么意思?
      

  3.   

    我想buf.split("\\s+")[0], 这句是读的每一行中第一个字符串,也就是名字,后面的buf是这一整行的数据,然后在map中,将每一行的数据存入对应的名字当中
    buf.split("\\s+")应该是以文字数字为分隔符
      

  4.   


    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.Frame;
    import java.awt.Label;
    import java.awt.Panel;
    import java.awt.TextArea;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashMap;
    import java.util.Map;public class MyFrame extends Frame implements ActionListener {
    Label jlname = null;
    TextField name = null;
    TextArea info = null; public MyFrame() {
    jlname = new Label("姓名");
    name = new TextField(14);
    info = new TextArea(5, 22);
    Panel top = new Panel();
    Panel center = new Panel();
    top.setLayout(new FlowLayout());
    top.add(jlname);
    top.add(name);
    center.add(info);
    name.addActionListener(this); this.add(top, BorderLayout.NORTH);
    this.add(center, BorderLayout.CENTER); this.pack();
    this.setVisible(true);
    } public static void main(String args[]) throws Exception {
    new MyFrame(); } @Override
    public void actionPerformed(ActionEvent e) {
    System.out.println("yes");
    // 一开始把文件读到一个map中
    Map<String, String> map = new HashMap<String, String>();
    BufferedReader br = null;
    try {
    br = new BufferedReader(new InputStreamReader(new FileInputStream(
    "test.txt")));
    String str = null;
    while ((str = br.readLine()) != null) {
    if (str.startsWith("姓名")) {
    continue;
    }
    map.put(str.split("\\s+")[0], str);
    }
    } catch (IOException e1) {
    e1.printStackTrace();
    } finally {
    try {
    br.close();
    } catch (IOException e1) {
    e1.printStackTrace();
    }
    }
    if (map.containsKey(name.getText())) {
    info.setText(map.get(name.getText()));
    }
    }
    }
      

  5.   


    buf为一行文本内容,前面是按空格切开字符串buf,得到姓名
      

  6.   

    请问关于实现计算器小数点输入问题?我代码下面:不知道怎样添加吧b[10]的事件代码
    package shanwei;
    import java.awt.*;
    import java.awt.event.*;import javax.swing.*;public class Calculator extends JFrame implements ActionListener{
    JPanel jp1,jp2,jp3;
    JButton b[]=new JButton[17];
    JTextField jtf;
    String []s={"0","1","2","3","4","5","6","7","8","9",".","+","-","*","/","=","c"};
    double n,m1,m2;
    int i,flag=0;
    public static void main(String[] args) {
    Calculator calculator=new Calculator();
    }
    Calculator(){
    jp1=new JPanel();
    jp2=new JPanel();
    jp3=new JPanel();
    jtf=new JTextField(20);
    jp1.setLayout(new GridLayout(4,4,10,10));
    for(i=0;i<16;i++){
    b[i]=new JButton(s[i]);
    jp1.add(b[i]);
    b[i].addActionListener(this);
    }
    b[16]=new JButton(s[16]);

    jtf.setAlignmentY(CENTER_ALIGNMENT);
    jp2.add(jtf);
    jp3.add(b[16]);
    b[16].addActionListener(this);
    add(jp1,BorderLayout.SOUTH);
    add(jp2,BorderLayout.NORTH);
    add(jp3);
    setSize(300,300);
    setLocation(400,300);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);

    } @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    String str="";
    for(i=0;i<10;i++){
     if(e.getSource()==b[i])
     {
     if(i==10){
     m1=Double.parseDouble(jtf.getText());
     
     }
     
     
     n=n*10+i;
    str=String.valueOf(n);
    jtf.setText(str);
           
    }
     }


    for(i=10;i<=14;i++)
    if(e.getSource()==b[i]){      //依次寻找与所事件匹配的的运算符是那种
            m1=Double.parseDouble(jtf.getText());
            
            if(flag==11)  m2=m1+m2; //如果连续2次或以上点击运算符而没有按“C”或“=”键,则计算//并保存到m2
                   else if(flag==12) m2=m2-m1;
                   else if(flag==13) m2=m2*m1;
                   else if(flag==14) m2=m2/m1;
                   else m2=m1;    // 如果没有连续的运算符运算,就保存当前数据到m2
            
                   if(i==11)  flag=11;       //   记录运算符
                   else if(i==12) flag=12;
                   else if(i==13) flag=13;
                   if(i==14) flag=14;
                   str=String.valueOf(m2);
                   jtf.setText(str);         //显示连续的运算过程
                   n=0;          //   n还原0,记录下次输入数据
                   break;    // 如果找到了匹配的运算符并完成运算和记录就退出寻找过程

    }
    if(e.getSource()==b[15]){
    m1=Double.parseDouble(jtf.getText());
    if(flag==11)m2=m1+m2;
    if(flag==12)m2=m2-m1;
    if(flag==13)m2=m2*m1;
    if(flag==14)m2=m2/m1;
    str=String.valueOf(m2);
    jtf.setText(str);
    n=0;
    }
    if(e.getSource()==b[16]){
    n=0;
    jtf.setText("0");
    flag=0;
    }

    }

    }