Java 无法从JTextField中找到首先输入的值的原因
代码如下:Java 无法从JTextField中找到首先输入的值的原因,java,swing,hashmap,jtextfield,Java,Swing,Hashmap,Jtextfield,代码如下: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; class Phone{ private String name; private String phone_number; private String address; public Phone(String name,String phone_number, String address) { t
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
class Phone{
private String name;
private String phone_number;
private String address;
public Phone(String name,String phone_number, String address) {
this.name = name;
this.phone_number = phone_number;
this.address = address;
}
String getName() {return this.name;}
String getNumber() {return this.phone_number;}
String getAddress() {return this.address;}
}
public class Phone_Book extends JFrame{
private JTextArea ta = new JTextArea();
private JButton lookup = new JButton("lookup");
private JButton search = new JButton("search");
private JButton input = new JButton("input");
private JButton remove = new JButton("remove");
private JLabel name = new JLabel("name");
private JLabel phone_number = new JLabel("phone_number");
private JLabel address = new JLabel("address");
private JTextField name_input = new JTextField();
private JTextField phone_number_input = new JTextField();
private JTextField address_input = new JTextField();
private HashMap<String,Phone> hashPhoneBook = new HashMap<String, Phone>();
public Phone_Book() {
setTitle("Phone Book");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(null);
//*********************PhoneBook Design ********************************************
JPanel buttonPanel = new JPanel();
buttonPanel.add(inquiry);
buttonPanel.add(search);
buttonPanel.add(input);
buttonPanel.add(remove);
buttonPanel.setLayout(new GridLayout(1,4));
buttonPanel.setSize(350,30);
buttonPanel.setLocation(670,70);
JPanel labelPanel = new JPanel();
labelPanel.add(name);
labelPanel.add(phone_number);
labelPanel.add(address);
labelPanel.setLayout(new GridLayout(3,1));
labelPanel.setSize(80,150);
labelPanel.setLocation(670,110);
JPanel textPanel = new JPanel();
textPanel.add(name_input);
textPanel.add(phone_number_input);
textPanel.add(address_input);
textPanel.setLayout(new GridLayout(3,1,0,25));
textPanel.setSize(260, 140);
textPanel.setLocation(750, 120);
JScrollPane js = new JScrollPane(ta);
js.setSize(600, 300);
js.setLocation(20, 10);
c.add(js);
c.add(buttonPanel);
c.add(labelPanel);
c.add(textPanel);
//********************** PhoneBook Function **************************************************
...
//---- problem occurs-------------------------------------
search.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ta.setText(" ");
Phone p = hashPhoneBook.get(name_input.getText());
if(p == null) ta.append(name_input.getText()+"doesn't exist\n");
else {
ta.append(p.getName()+" "+p.getNumber()+" "+p.getAddress()+"\n");
}
name_input.setText(" ");
}
});
//------------------------------------------------------
...
setSize(1100,400);
setVisible(true);
}
public static void main(String[] args) {
new Phone_Book();
}
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.util.*;
班级电话{
私有字符串名称;
私人电话号码;
私有字符串地址;
公用电话(字符串名称、字符串电话号码、字符串地址){
this.name=名称;
this.phone\u number=电话号码;
this.address=地址;
}
字符串getName(){返回this.name;}
字符串getNumber(){返回此.phone_number;}
字符串getAddress(){返回此.address;}
}
公共类电话簿扩展JFrame{
私有JTextArea ta=新JTextArea();
私有JButton查找=新JButton(“查找”);
私有JButton search=新JButton(“search”);
私有JButton输入=新JButton(“输入”);
私有JButton remove=新JButton(“remove”);
专用JLabel名称=新JLabel(“名称”);
私人JLabel电话号码=新JLabel(“电话号码”);
专用JLabel地址=新JLabel(“地址”);
私有JTextField name_input=new JTextField();
私人JTextField电话号码输入=新JTextField();
私有JTextField地址_输入=新JTextField();
私有HashMap hashPhoneBook=新HashMap();
公用电话簿(){
设置标题(“电话簿”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
容器c=getContentPane();
c、 setLayout(空);
//*********************电话簿设计********************************************
JPanel buttonPanel=新的JPanel();
按钮面板。添加(查询);
按钮面板。添加(搜索);
按钮面板。添加(输入);
按钮面板。添加(删除);
buttonPanel.setLayout(新网格布局(1,4));
按钮面板设置尺寸(350,30);
按钮面板设置位置(670,70);
JPanel labelPanel=新的JPanel();
labelPanel.add(名称);
labelPanel.add(电话号码);
labelPanel.add(地址);
labelPanel.setLayout(新网格布局(3,1));
labelPanel.setSize(80150);
labelPanel.设置位置(670110);
JPanel textPanel=新的JPanel();
textPanel.add(名称\输入);
textPanel.add(电话号码输入);
textPanel.add(地址\输入);
setLayout(新的GridLayout(3,1,0,25));
textPanel.setSize(260、140);
textPanel.setLocation(750120);
JScrollPane js=新的JScrollPane(ta);
js.setSize(600300);
js.setLocation(20,10);
c、 添加(js);
c、 添加(按钮面板);
c、 添加(标签面板);
c、 添加(文本面板);
//**********************电话簿功能**************************************************
...
//----出现问题------------------
search.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
ta.setText(“”);
Phone p=hashPhoneBook.get(name_input.getText());
如果(p==null)ta.append(name_input.getText()+“不存在\n”);
否则{
附加(p.getName()+“”+p.getNumber()+“”+p.getAddress()+“\n”);
}
name_input.setText(“”);
}
});
//------------------------------------------------------
...
设置大小(1100400);
setVisible(真);
}
公共静态void main(字符串[]args){
新电话簿();
}
}
问题就在这里
HashMap
中查找或删除第一个值时,它不起作用。
只有我得到了“空”
但是,当我按下“空格”并输入值时,效果很好。
(例如,“大卫”-->“大卫”)我想知道为什么会发生这种情况?您的HashMap中的键似乎设置不正确。您还没有包括设置此项的代码 不过,在我看来,我会用一个简单的以行分隔的文本文件来实现电话簿&将所有记录加载到一个字符串中,而不是对电话簿使用HashMap。原因是您可以使用正则表达式来匹配不区分大小写和部分记录。使用HashMap时,键必须是完全匹配的“我以为不需要它,我没有把它放在这段代码中”为了更快地获得更好的帮助,可以添加or。