我正在爲一個項目設計一個基本的電話簿。它有三個類:Main(用於GUI),TelephoneDirectory(用於存儲TelephoneRecords對象的對象)和TelephoneRecords類(用於存儲每個記錄對象的信息)。Java - 使用(摘要)顯示HashMap的內容ListModel
需求狀態:通過添加一個列表來顯示電話目錄的完整當前內容,按名稱按字母順序排列,從而擴展您的應用程序。您將需要實施ListModel
。在開始自己的實施之前,您可能需要學習AbstractListModel
類。
唯一的問題是,我完全不知道如何擴展我的應用程序來實現這一點。我在網上搜索了整晚,並沒有找到辦法做到這一點。我已經嘗試將對象存儲在AbstractListModel而不是HashMap中,但會得到錯誤。我不完全知道它是什麼或爲什麼使用它,以及我如何使用它。下一個要求(順便說一下)是讓JList在輸入新數據時自動更新,所以我猜這跟它有關係?
無論哪種方式,如果任何人都可以幫助它會很好。我對需要被編輯過的版本之前的當前工作的代碼是:
主要
public class Main extends JFrame implements ActionListener {
private static TelephoneDirectory directory = new TelephoneDirectory();
private JTextField nameField;
private JTextField numberField;
private JList contactList;
public Main() {
setTitle("Telephone Directory");
setLayout(new GridLayout(0,2));
JLabel nameLabel = new JLabel("Name of Contact:");
nameField = new JTextField(20);
add(nameLabel);
add(nameField);
JLabel numberLabel = new JLabel("Number of Contact:");
numberField = new JTextField(20);
add(numberLabel);
add(numberField);
JButton enterButton = new JButton("Enter");
JButton cancelButton = new JButton("Cancel");
enterButton.addActionListener(this);
cancelButton.addActionListener(this);
add(enterButton);
add(cancelButton);
JLabel contactsLabel = new JLabel("Current Contacts:");
contactList = new JList();
add(contactsLabel);
add(contactList);
setVisible(true);
pack();
}
public static void main(String[] args) {
new Main();
}
@Override
public void actionPerformed(ActionEvent arg0) {
JButton jb = (JButton) arg0.getSource();
if (jb.getText().equals("Cancel")) {
System.exit(0);
} else {
directory.addRecord(nameField.getText(), new TelephoneRecords(nameField.getText(), numberField.getText()));
System.out.println("Added record for " + nameField.getText() + ": number is " + numberField.getText() + ".");
}
}
}
電話簿
public class TelephoneDirectory implements Iterable<TelephoneRecords> {
private HashMap records;
public TelephoneDirectory() {
records = new HashMap<String, TelephoneRecords>();
}
public void addRecord(String name, TelephoneRecords newRecord) {
records.put(name, newRecord);
}
public TelephoneRecords getRecord(String name) {
return (TelephoneRecords) records.get(name);
}
public void getDirectory() {
System.out.println("Telephone Directory:");
records.values().iterator();
}
@Override
public Iterator<TelephoneRecords> iterator() {
return records.values().iterator();
}
}
TELEPHONERECORDS
public class TelephoneRecords {
private String name;
private String number;
public TelephoneRecords(String name, String number) {
this.name = name;
this.number = number;
}
public String getName() {
return name;
}
public String getNumber() {
return number;
}
@Override
public String toString() {
return "The phone number of " + name + " is " + number + ".";
}
}
你將如何做到這一點,並將HashMap存儲在AbstractListModel類中? – mark 2012-03-09 10:39:26
+1。 @ user1258337:['EnvTableTest'](http://stackoverflow.com/a/9134371/230513)就是一個例子。 – trashgod 2012-03-09 12:02:19