Причина, по которой я не могу найти значение, которое вводю первым из JTextField - PullRequest
0 голосов
/ 06 декабря 2018

Вот код:

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();
}
}

Вот проблема.

  1. Я вижу все значения (включая первое значение, которое я впервые ввел после запускапрограмма), когда я нажимаю кнопку «поиск» (я думал, что она не нужна, я не вставил ее в этот код).

  2. Когда я пытаюсь найти или удалить первое значение из HashMap, оно не работает.Только я получил «ноль». Но когда я нажал «пробел» и ввел значение, это сработало хорошо.(например, «Давид» -----> «Давид»)

Интересно, почему это происходит?

1 Ответ

0 голосов
/ 06 декабря 2018

Кажется, что ключи в вашей HashMap установлены неправильно.Вы не включили код, где он установлен.

IMO, хотя я бы реализовал телефонную книгу с помощью простого текстового файла с разделителями строк и загрузил бы все записи в строку вместо использования HashMap для вашего телефона.книга.Причина в том, что вы можете использовать регулярные выражения для сопоставления записей без учета регистра и частичных.При использовании HashMap ключ должен точно соответствовать

...