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; } } } ``` 这个例子实现了一个简单的通讯录应用程序,其中包含了添加、编辑、删除和搜索联系人的功能。此外,它还使用文件输入/输出流来保存联系人信息,以便在下次运行应用程序时重新加载它们。

相关推荐

最新推荐

recommend-type

Java通讯录系统全部源码

Java实现通讯录系统全部源码 源码: package sources; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LoginForm extends JFrame implements ActionListener { //声明组件 ...
recommend-type

java课程设计-通讯录系统

随着当今世界经济的快速发展,通讯技术日益成熟,个人间的联系增加,个人对...软件操作窗口平时可以隐藏于屏幕边缘,用户鼠标移至该处及显示操作界面,用只需输入关键词(联系人姓名)即可方便地查找所需的通讯录信息。
recommend-type

Java通讯录管理系统

1:Java文本通讯录管理系统,不需要建立SQL数据库! 2:Java通讯录系统用到的都是一些简单易懂的代码,方便上手,适合初学者借鉴学习! 3:直接可以作为Java前面作业,或者想要有自己的内容稍微改改即可! 4:没有...
recommend-type

Java课程设计报告—通讯录设计

1.1 通信录图形用户界面设计 1.2 通信录与ACCESS数据库存储数据
recommend-type

Android获取手机通讯录、sim卡联系人及调用拨号界面方法

主要介绍了Android获取手机通讯录、sim卡联系人及调用拨号界面方法,本文分别给出实现代码实现获取通讯录和sim卡的联系人,以及权限配置和调用系统拨打电话的界面的实现代码,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。