java图形用户界面设计通讯录源码
时间: 2024-02-04 15:03:27 浏览: 26
好的,以下是一个简单的Java图形用户界面设计通讯录的源码示例,您可以参考它来构建自己的应用程序:
```java
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.ArrayList;
public class AddressBook extends JFrame {
private JTable table;
private DefaultTableModel model;
private JTextField nameField, phoneField, emailField;
private ArrayList<Person> contacts = new ArrayList<>();
public AddressBook() {
setTitle("地址簿");
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
// 创建表格组件
String[] columns = {"姓名", "电话", "电子邮件"};
model = new DefaultTableModel(columns, 0);
table = new JTable(model);
// 创建按钮组件
JButton addButton = new JButton("添加");
addButton.addActionListener(new AddButtonListener());
JButton editButton = new JButton("编辑");
editButton.addActionListener(new EditButtonListener());
JButton deleteButton = new JButton("删除");
deleteButton.addActionListener(new DeleteButtonListener());
JButton searchButton = new JButton("搜索");
searchButton.addActionListener(new SearchButtonListener());
// 创建文本框组件
nameField = new JTextField(10);
phoneField = new JTextField(10);
emailField = new JTextField(10);
// 创建面板组件
JPanel inputPanel = new JPanel(new GridLayout(2, 3));
inputPanel.add(new JLabel("姓名: "));
inputPanel.add(nameField);
inputPanel.add(new JLabel(""));
inputPanel.add(new JLabel("电话: "));
inputPanel.add(phoneField);
inputPanel.add(new JLabel(""));
inputPanel.add(new JLabel("电子邮件: "));
inputPanel.add(emailField);
inputPanel.add(new JLabel(""));
JPanel buttonPanel = new JPanel(new FlowLayout());
buttonPanel.add(addButton);
buttonPanel.add(editButton);
buttonPanel.add(deleteButton);
buttonPanel.add(searchButton);
// 将组件添加到窗口中
getContentPane().setLayout(new BorderLayout());
getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
getContentPane().add(inputPanel, BorderLayout.NORTH);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
// 从文件中加载联系人信息
loadContacts();
}
// 添加联系人按钮监听器
private class AddButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String name = nameField.getText();
String phone = phoneField.getText();
String email = emailField.getText();
Person person = new Person(name, phone, email);
contacts.add(person);
model.addRow(new Object[]{name, phone, email});
clearFields();
}
}
// 编辑联系人按钮监听器
private class EditButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int rowIndex = table.getSelectedRow();
if (rowIndex == -1) {
JOptionPane.showMessageDialog(AddressBook.this, "请选择要编辑的联系人");
return;
}
String name = nameField.getText();
String phone = phoneField.getText();
String email = emailField.getText();
Person person = new Person(name, phone, email);
contacts.set(rowIndex, person);
model.setValueAt(name, rowIndex, 0);
model.setValueAt(phone, rowIndex, 1);
model.setValueAt(email, rowIndex, 2);
clearFields();
}
}
// 删除联系人按钮监听器
private class DeleteButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int rowIndex = table.getSelectedRow();
if (rowIndex == -1) {
JOptionPane.showMessageDialog(AddressBook.this, "请选择要删除的联系人");
return;
}
contacts.remove(rowIndex);
model.removeRow(rowIndex);
clearFields();
}
}
// 搜索联系人按钮监听器
private class SearchButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String query = JOptionPane.showInputDialog(AddressBook.this, "请输入要搜索的姓名");
if (query == null || query.isEmpty()) {
return;
}
for (int i = 0; i < model.getRowCount(); i++) {
String name = (String) model.getValueAt(i, 0);
if (name.toLowerCase().contains(query.toLowerCase())) {
table.setRowSelectionInterval(i, i);
return;
}
}
JOptionPane.showMessageDialog(AddressBook.this, "未找到匹配项");
}
}
// 清空文本框内容
private void clearFields() {
nameField.setText("");
phoneField.setText("");
emailField.setText("");
}
// 加载联系人信息
private void loadContacts() {
try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("contacts.dat"))) {
contacts = (ArrayList<Person>) inputStream.readObject();
for (Person person : contacts) {
model.addRow(new Object[]{person.getName(), person.getPhone(), person.getEmail()});
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
// 保存联系人信息
private void saveContacts() {
try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("contacts.dat"))) {
outputStream.writeObject(contacts);
} catch (IOException e) {
e.printStackTrace();
}
}
// 应用程序入口
public static void main(String[] args) {
AddressBook addressBook = new AddressBook();
addressBook.setVisible(true);
}
// 联系人类
private static class Person implements Serializable {
private String name;
private String phone;
private String email;
public Person(String name, String phone, String email) {
this.name = name;
this.phone = phone;
this.email = email;
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
public String getEmail() {
return email;
}
}
}
```
这个例子实现了一个简单的通讯录应用程序,其中包含了添加、编辑、删除和搜索联系人的功能。此外,它还使用文件输入/输出流来保存联系人信息,以便在下次运行应用程序时重新加载它们。