标签:
设计思想,是需要不断领悟的。。。
学Java的人都知道这是向对象的编程语言,从字面上理解,就是针对对象的一些操作,将具有某一特性的实体封装成一个类或者是将具有一定功能的方法,抽取出来封装成一个供外面调用的方法,然后通过new这个类或方法生成对象,最后通
过对对象进行操作或者实现相应的功能。如将一个人封装成一个人的类,人有属性:性别,年龄,出生日期,家庭住址等,外界对人进行操作时,只能改变其属性值,但是不能改变属性的种类,这要更安全,而且当对人进行操作时,也是连带属性
一起进行操作,这就是面向对象的编程。
所以java的设计思想一般离不开封装,如做一个项目,首先对项目的每个子系统进行封装,然后对子系统中的每个模块进行封装,最后对每个模块中的每个组件(组件:能完成某一特定功能的方法)进行封装,这里的子系统、模块、组件都是
一个封装体,这样做不仅能使项目做起来更加有条理,更加安全,而且让后面的维护和更改更加方便、简单、易操作。(后面有项目的实例)
b、接口很重要的一个功能:封装隔离
c、接口是功能块或封装块的外观
接口及相关机制最基本的作用:通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。根据接口可以了解对象的交互界面,而不需要了解对象所属的类。
面向对象程序设计讲究“提高内聚,松散耦合”,那么不同的程序模块怎么相互访问呢,就是通过接口,也就是接口是各部分对外的统一外观。接口在Java程序设计中体现的思想就是封装隔离,因为接口只是描述一个统一的行为,所以开发人员在面向接口编程时并不关心具体的实现。
由以上讲到的接口的作用和基本思想可以看到,接口在面向对象的Java程序设计中占有举足轻重的地位。事实上在设计阶段最重要的任务之一就是设计出各部分的接口,然后通过接口的组合,形成程序的基本框架结构。
注:对于行为模型,优先选用接口,尽量少用抽象类
既为约束子类的功能,又要提供一些公共的功能,就选用抽象类
2、优先使用对象组合而非类继承
在程序设计中,继承应该当做一种资源来使用,而不应该随意使用。同时在继承的时候继承链不能拖得太长,一旦有一个程序挂了,后面一路挂。
3、分层
最典型的三层结构: 表现层 --> 逻辑层 --> 数据层
① 表现层功能:展示数据、人机交互、收集参数调用逻辑层。
② 逻辑层功能:进行数据的逻辑校验、进行逻辑判断、实现业务功能、处理相关功能、处理后续流程、组织数据返回给表现层。
③ 数据层功能:实现数据持久化、实现对象和持久化数据的双向映射。
4、层间交互的基本原则
① 表现层调用逻辑层,逻辑层调用数据层,不可以反过来。
② 层间交互也应该通过接口进行调用,以确保各层的实现独立变化。
★ 加强内聚,松散耦合
指一个类,能够在自己内部实现的功能就自己内部实现,不要去调其它类,尽量减少与其它类的依赖关系。
★ 好的封装性
不必对外开放的部分,一律不对外开放。如果在不确定属性权限的情况下,先把类的属性设成private,用的时候再开。
★ 类的粒度要合理
Java规范中建议,一个类的大小不要超过1000行,一个方法的大小不要超过100行。
★ 实现类不能依赖它的使用类
一个类依赖(使用或调用)了另一个类,那么在另一个类中就不能反过来再依赖当前类。
★ 应考虑灵活性,也就是可配置、可维护
用户的需求是会不断改变的,后期的修改与维护是不可避免的,因此软件开发时就要考虑灵活性。
★ 要考虑性能,考虑可伸缩性
要权衡速度与资源耗费之间的关系,要考虑软件能够在一定范围内可伸缩。
★ 要考虑今后可能的变化,也就是可扩展性
可扩展性指该应用程序能够很方便地添加新的功能。
★ 要考虑合理的复用
要尽量考虑复用,但也不能光考虑复用,不能把其它的设计原则都丢掉了。
★ 要合理的考虑接口和抽象类的使用
优先使用接口,如果既想约束实现类的行为,又要为实现类提供公共的功能时,采用抽象类。
★ 尽量减少类与协作类的交互次数和交互信息的量
类之间不要反复地调用,不要每次传很多的数据。
★ 父类不应知道子类的信息,子类必须知道父类的信息
★ 访问对象必须通过接口,不能绕过接口直接去访问
功能:图形界面的个人信息管理系统,实现增、删、改、查等功能,而且将相关信息存在文件中。
设计思想:每个功能一个模块,也就是一个封装体。
表现层:
AddressApp.java(主界面)
设置界面的大体框架,如菜单,和面板,标题等
/* * AddressApp.java * * Created on __DATE__, __TIME__ */ package cn.hncu; import javax.swing.JFrame; import cn.hncu.ui.ListPanel; /** * * @author __USER__ */ public class AddressApp extends JFrame { /** Creates new form AddressApp */ public AddressApp() { initComponents(); this.setContentPane(new ListPanel(this)); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ //GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { menuBar = new javax.swing.JMenuBar(); fileMenu = new javax.swing.JMenu(); openMenuItem = new javax.swing.JMenuItem(); saveMenuItem = new javax.swing.JMenuItem(); saveAsMenuItem = new javax.swing.JMenuItem(); exitMenuItem = new javax.swing.JMenuItem(); editMenu = new javax.swing.JMenu(); cutMenuItem = new javax.swing.JMenuItem(); copyMenuItem = new javax.swing.JMenuItem(); pasteMenuItem = new javax.swing.JMenuItem(); deleteMenuItem = new javax.swing.JMenuItem(); helpMenu = new javax.swing.JMenu(); contentsMenuItem = new javax.swing.JMenuItem(); aboutMenuItem = new javax.swing.JMenuItem(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setMinimumSize(new java.awt.Dimension(800, 600)); getContentPane().setLayout(null); fileMenu.setText("File"); openMenuItem.setText("Open"); fileMenu.add(openMenuItem); saveMenuItem.setText("Save"); fileMenu.add(saveMenuItem); saveAsMenuItem.setText("Save As ..."); fileMenu.add(saveAsMenuItem); exitMenuItem.setText("Exit"); exitMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { exitMenuItemActionPerformed(evt); } }); fileMenu.add(exitMenuItem); menuBar.add(fileMenu); editMenu.setText("Edit"); cutMenuItem.setText("Cut"); editMenu.add(cutMenuItem); copyMenuItem.setText("Copy"); editMenu.add(copyMenuItem); pasteMenuItem.setText("Paste"); editMenu.add(pasteMenuItem); deleteMenuItem.setText("Delete"); editMenu.add(deleteMenuItem); menuBar.add(editMenu); helpMenu.setText("Help"); contentsMenuItem.setText("Contents"); helpMenu.add(contentsMenuItem); aboutMenuItem.setText("About"); helpMenu.add(aboutMenuItem); menuBar.add(helpMenu); setJMenuBar(menuBar); pack(); }// </editor-fold> //GEN-END:initComponents private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed System.exit(0); }//GEN-LAST:event_exitMenuItemActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new AddressApp().setVisible(true); } }); } //GEN-BEGIN:variables // Variables declaration - do not modify private javax.swing.JMenuItem aboutMenuItem; private javax.swing.JMenuItem contentsMenuItem; private javax.swing.JMenuItem copyMenuItem; private javax.swing.JMenuItem cutMenuItem; private javax.swing.JMenuItem deleteMenuItem; private javax.swing.JMenu editMenu; private javax.swing.JMenuItem exitMenuItem; private javax.swing.JMenu fileMenu; private javax.swing.JMenu helpMenu; private javax.swing.JMenuBar menuBar; private javax.swing.JMenuItem openMenuItem; private javax.swing.JMenuItem pasteMenuItem; private javax.swing.JMenuItem saveAsMenuItem; private javax.swing.JMenuItem saveMenuItem; // End of variables declaration//GEN-END:variables }ListPanel.java
清单面板,包括数据的显示,和数据的相关操作按钮
/* * * Created on __DATE__, __TIME__ */ package cn.hncu.ui; import javax.swing.JFrame; import cn.hncu.business.MySet; /** * * @author __USER__ */ public class ListPanel extends javax.swing.JPanel { private JFrame mainFrame = null; /** Creates new form ListPanel */ public ListPanel(JFrame mainFrame) { this.mainFrame = mainFrame; this.initComponents(); myInitData(); } public ListPanel(JFrame mainFrame, Object objs[]) { this.mainFrame = mainFrame; this.initComponents(); jListAddress.setListData(objs); } private void myInitData() { MySet set = new MySet(); Object objs[] = set.getAll(); jListAddress.setListData(objs); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ //GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { queryBtn = new javax.swing.JButton(); addBtn = new javax.swing.JButton(); updateBtn = new javax.swing.JButton(); deleteBtn = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); jScrollPane1 = new javax.swing.JScrollPane(); jListAddress = new javax.swing.JList(); setPreferredSize(new java.awt.Dimension(800, 600)); setLayout(null); queryBtn.setText("\u67e5\u8be2\u64cd\u4f5c"); queryBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { queryBtnActionPerformed(evt); } }); add(queryBtn); queryBtn.setBounds(510, 330, 93, 29); addBtn.setText("\u6dfb\u52a0\u64cd\u4f5c"); addBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addBtnActionPerformed(evt); } }); add(addBtn); addBtn.setBounds(140, 330, 95, 29); updateBtn.setText("\u4fee\u6539\u64cd\u4f5c"); updateBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { updateBtnActionPerformed(evt); } }); add(updateBtn); updateBtn.setBounds(390, 330, 93, 29); deleteBtn.setText("\u5220\u9664\u64cd\u4f5c"); deleteBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteBtnActionPerformed(evt); } }); add(deleteBtn); deleteBtn.setBounds(260, 330, 93, 29); jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24)); jLabel1.setText("\u6211\u7684\u5730\u5740\u672c"); add(jLabel1); jLabel1.setBounds(310, 70, 150, 40); jListAddress.setModel(new javax.swing.AbstractListModel() { String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" }; public int getSize() { return strings.length; } public Object getElementAt(int i) { return strings[i]; } }); jScrollPane1.setViewportView(jListAddress); add(jScrollPane1); jScrollPane1.setBounds(250, 130, 250, 178); }// </editor-fold> //GEN-END:initComponents private void queryBtnActionPerformed(java.awt.event.ActionEvent evt) { mainFrame.setContentPane(new QueryPanel(mainFrame)); mainFrame.validate(); } private void updateBtnActionPerformed(java.awt.event.ActionEvent evt) { String str = (String) (jListAddress.getSelectedValue()); mainFrame.setContentPane(new UpDatePanel(mainFrame, str)); mainFrame.validate(); } private void deleteBtnActionPerformed(java.awt.event.ActionEvent evt) { String str = (String) (jListAddress.getSelectedValue()); mainFrame.setContentPane(new DeletePanel(mainFrame, str)); mainFrame.validate(); } private void addBtnActionPerformed(java.awt.event.ActionEvent evt) { mainFrame.setContentPane(new AddPanel(mainFrame)); mainFrame.validate(); } //GEN-BEGIN:variables // Variables declaration - do not modify private javax.swing.JButton addBtn; private javax.swing.JButton deleteBtn; private javax.swing.JLabel jLabel1; private javax.swing.JList jListAddress; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JButton queryBtn; private javax.swing.JButton updateBtn; // End of variables declaration//GEN-END:variables }
点击添加按钮,就会跳到这个面板中进行添加操作
/* * AddPanel.java * * Created on __DATE__, __TIME__ */ package cn.hncu.ui; import javax.swing.JFrame; import javax.swing.JOptionPane; import cn.hncu.business.MySet; /** * * @author __USER__ */ public class AddPanel extends javax.swing.JPanel { private JFrame mainFrame = null; /** Creates new form AddPanel */ public AddPanel(JFrame mainFrame) { this.mainFrame = mainFrame; initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ //GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jLabelAddr = new javax.swing.JLabel(); jLabelName1 = new javax.swing.JLabel(); jLabelAge = new javax.swing.JLabel(); tfdAddr = new javax.swing.JTextField(); tfdName = new javax.swing.JTextField(); tfdAge = new javax.swing.JTextField(); jLabel1 = new javax.swing.JLabel(); btnBack = new javax.swing.JButton(); btnAdd = new javax.swing.JButton(); setLayout(null); jLabelAddr.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelAddr.setText("\u5730\u5740"); add(jLabelAddr); jLabelAddr.setBounds(220, 220, 70, 40); jLabelName1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelName1.setText("\u59d3\u540d"); add(jLabelName1); jLabelName1.setBounds(220, 140, 70, 40); jLabelAge.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelAge.setText("\u5e74\u9f84"); add(jLabelAge); jLabelAge.setBounds(220, 180, 70, 40); add(tfdAddr); tfdAddr.setBounds(290, 230, 220, 26); add(tfdName); tfdName.setBounds(290, 150, 90, 26); add(tfdAge); tfdAge.setBounds(290, 190, 90, 26); jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24)); jLabel1.setText("\u6dfb\u52a0\u9762\u677f..."); add(jLabel1); jLabel1.setBounds(320, 80, 120, 40); btnBack.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18)); btnBack.setText("\u8fd4\u56de"); btnBack.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnBackActionPerformed(evt); } }); add(btnBack); btnBack.setBounds(450, 330, 95, 33); btnAdd.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18)); btnAdd.setText("\u6dfb\u52a0"); btnAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnAddActionPerformed(evt); } }); add(btnAdd); btnAdd.setBounds(280, 330, 90, 33); }// </editor-fold> //GEN-END:initComponents private void btnBackActionPerformed(java.awt.event.ActionEvent evt) { mainFrame.setContentPane(new ListPanel(mainFrame)); mainFrame.validate(); } private void btnAddActionPerformed(java.awt.event.ActionEvent evt) { String name = tfdName.getText(); String addr = tfdAddr.getText(); String ageStr = tfdAge.getText(); try { int ageInt = Integer.parseInt(ageStr); } catch (NumberFormatException e) { e.printStackTrace(); } String str = name + " , " + ageStr + " , " + addr; boolean flag = false; MySet set = new MySet(); flag = set.add(str); if (flag) { mainFrame.setContentPane(new ListPanel(mainFrame)); mainFrame.validate(); } else { JOptionPane.showMessageDialog(this, "添加失败"); } } //GEN-BEGIN:variables // Variables declaration - do not modify private javax.swing.JButton btnAdd; private javax.swing.JButton btnBack; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabelAddr; private javax.swing.JLabel jLabelAge; private javax.swing.JLabel jLabelName1; private javax.swing.JTextField tfdAddr; private javax.swing.JTextField tfdAge; private javax.swing.JTextField tfdName; // End of variables declaration//GEN-END:variables }
删除界面,选择需要删除的用户点击删除按钮
/* * DeletePanel.java * * Created on __DATE__, __TIME__ */ package cn.hncu.ui; import javax.swing.JFrame; import javax.swing.JOptionPane; import cn.hncu.business.MySet; /** * * @author __USER__ */ public class DeletePanel extends javax.swing.JPanel { private JFrame mainFrame = null; String str = ""; /** Creates new form DeletePanel */ public DeletePanel(JFrame mainFrame, String str) { this.str = str; this.mainFrame = mainFrame; initComponents(); String strs[] = str.split(","); tfdName.setText(strs[0]); tfdName.setEditable(false); tfdAge.setText(strs[1]); tfdAge.setEditable(false); tfdAddr.setText(strs[2]); tfdAddr.setEditable(false); } //GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jLabelAddr = new javax.swing.JLabel(); jLabelName = new javax.swing.JLabel(); jLabelAge = new javax.swing.JLabel(); tfdAddr = new javax.swing.JTextField(); tfdName = new javax.swing.JTextField(); tfdAge = new javax.swing.JTextField(); jLabel1 = new javax.swing.JLabel(); btnBack = new javax.swing.JButton(); btnDelete = new javax.swing.JButton(); setLayout(null); jLabelAddr.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelAddr.setText("\u5730\u5740"); add(jLabelAddr); jLabelAddr.setBounds(220, 230, 70, 40); jLabelName.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelName.setText("\u59d3\u540d"); add(jLabelName); jLabelName.setBounds(220, 150, 70, 40); jLabelAge.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelAge.setText("\u5e74\u9f84"); add(jLabelAge); jLabelAge.setBounds(220, 190, 70, 40); add(tfdAddr); tfdAddr.setBounds(290, 240, 220, 26); add(tfdName); tfdName.setBounds(290, 160, 90, 26); add(tfdAge); tfdAge.setBounds(290, 200, 90, 26); jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24)); jLabel1.setText("\u5220\u9664\u9762\u677f..."); add(jLabel1); jLabel1.setBounds(320, 90, 120, 40); btnBack.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18)); btnBack.setText("\u8fd4\u56de"); btnBack.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnBackActionPerformed(evt); } }); add(btnBack); btnBack.setBounds(450, 340, 95, 33); btnDelete.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18)); btnDelete.setText("\u5220\u9664"); btnDelete.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnDeleteActionPerformed(evt); } }); add(btnDelete); btnDelete.setBounds(280, 340, 90, 33); }// </editor-fold> //GEN-END:initComponents private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) { MySet set = new MySet(); boolean flag = set.delete(str); if (flag) { mainFrame.setContentPane(new ListPanel(mainFrame)); mainFrame.validate(); } else { JOptionPane.showMessageDialog(this, "添加失败"); } } private void btnBackActionPerformed(java.awt.event.ActionEvent evt) { mainFrame.setContentPane(new ListPanel(mainFrame)); mainFrame.validate(); } //GEN-BEGIN:variables // Variables declaration - do not modify private javax.swing.JButton btnBack; private javax.swing.JButton btnDelete; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabelAddr; private javax.swing.JLabel jLabelAge; private javax.swing.JLabel jLabelName; private javax.swing.JTextField tfdAddr; private javax.swing.JTextField tfdAge; private javax.swing.JTextField tfdName; // End of variables declaration//GEN-END:variables }
QueryPanel.java
查询界面
/* * QueryPanel.java * * Created on __DATE__, __TIME__ */ package cn.hncu.ui; import javax.swing.JFrame; import javax.swing.JOptionPane; import cn.hncu.business.MySet; /** * * @author __USER__ */ public class QueryPanel extends javax.swing.JPanel { private JFrame mainFrame = null; /** Creates new form QueryPanel */ public QueryPanel(JFrame mainFrame) { this.mainFrame = mainFrame; initComponents(); } //GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jLabelAddr = new javax.swing.JLabel(); jLabelName1 = new javax.swing.JLabel(); jLabelAge = new javax.swing.JLabel(); tfdAddr = new javax.swing.JTextField(); tfdName = new javax.swing.JTextField(); tfdAge = new javax.swing.JTextField(); jLabel1 = new javax.swing.JLabel(); btnBack = new javax.swing.JButton(); btnQuery = new javax.swing.JButton(); setLayout(null); jLabelAddr.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelAddr.setText("\u5730\u5740"); add(jLabelAddr); jLabelAddr.setBounds(230, 230, 70, 40); jLabelName1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelName1.setText("\u59d3\u540d"); add(jLabelName1); jLabelName1.setBounds(230, 150, 70, 40); jLabelAge.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelAge.setText("\u5e74\u9f84"); add(jLabelAge); jLabelAge.setBounds(230, 190, 70, 40); add(tfdAddr); tfdAddr.setBounds(300, 240, 220, 26); add(tfdName); tfdName.setBounds(300, 160, 90, 26); add(tfdAge); tfdAge.setBounds(300, 200, 90, 26); jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24)); jLabel1.setText("\u67e5\u8be2\u9762\u677f..."); add(jLabel1); jLabel1.setBounds(330, 90, 120, 40); btnBack.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18)); btnBack.setText("\u8fd4\u56de"); btnBack.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnBackActionPerformed(evt); } }); add(btnBack); btnBack.setBounds(460, 340, 95, 33); btnQuery.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18)); btnQuery.setText("\u67e5\u8be2"); btnQuery.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnQueryActionPerformed(evt); } }); add(btnQuery); btnQuery.setBounds(290, 340, 90, 33); }// </editor-fold> //GEN-END:initComponents private void btnQueryActionPerformed(java.awt.event.ActionEvent evt) { String name = tfdName.getText(); String addr = tfdAddr.getText(); String ageStr = tfdAge.getText(); MySet set = new MySet(); try { Object obj[] = set.Query(name, ageStr, addr); mainFrame.setContentPane(new ListPanel(mainFrame, obj)); mainFrame.validate(); } catch (Exception e) { JOptionPane.showMessageDialog(this, "无该联系人"); } } private void btnBackActionPerformed(java.awt.event.ActionEvent evt) { mainFrame.setContentPane(new ListPanel(mainFrame)); mainFrame.validate(); } //GEN-BEGIN:variables // Variables declaration - do not modify private javax.swing.JButton btnBack; private javax.swing.JButton btnQuery; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabelAddr; private javax.swing.JLabel jLabelAge; private javax.swing.JLabel jLabelName1; private javax.swing.JTextField tfdAddr; private javax.swing.JTextField tfdAge; private javax.swing.JTextField tfdName; // End of variables declaration//GEN-END:variables }
修改界面
/* * UpDate.java * * Created on __DATE__, __TIME__ */ package cn.hncu.ui; import javax.swing.JFrame; import javax.swing.JOptionPane; import cn.hncu.business.MySet; /** * * @author __USER__ */ public class UpDatePanel extends javax.swing.JPanel { private JFrame mainFrame = null; private String oldStr = ""; /** Creates new form UpDate */ public UpDatePanel(JFrame mainFrame, String oldStr) { this.mainFrame = mainFrame; this.oldStr = oldStr; initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ //GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jLabelAddr = new javax.swing.JLabel(); jLabelName1 = new javax.swing.JLabel(); jLabelAge = new javax.swing.JLabel(); tfdAddr = new javax.swing.JTextField(); tfdName = new javax.swing.JTextField(); tfdAge = new javax.swing.JTextField(); jLabel1 = new javax.swing.JLabel(); btnBack = new javax.swing.JButton(); btnUpdate = new javax.swing.JButton(); setLayout(null); jLabelAddr.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelAddr.setText("\u5730\u5740"); add(jLabelAddr); jLabelAddr.setBounds(250, 230, 70, 40); jLabelName1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelName1.setText("\u59d3\u540d"); add(jLabelName1); jLabelName1.setBounds(250, 150, 70, 40); jLabelAge.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14)); jLabelAge.setText("\u5e74\u9f84"); add(jLabelAge); jLabelAge.setBounds(250, 190, 70, 40); add(tfdAddr); tfdAddr.setBounds(320, 240, 220, 26); add(tfdName); tfdName.setBounds(320, 160, 90, 26); tfdAge.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { tfdAgeActionPerformed(evt); } }); add(tfdAge); tfdAge.setBounds(320, 200, 90, 26); jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24)); jLabel1.setText("\u4fee\u6539\u9762\u677f..."); add(jLabel1); jLabel1.setBounds(350, 90, 120, 40); btnBack.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18)); btnBack.setText("\u8fd4\u56de"); btnBack.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnBackActionPerformed(evt); } }); add(btnBack); btnBack.setBounds(480, 340, 95, 33); btnUpdate.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18)); btnUpdate.setText("\u4fee\u6539"); btnUpdate.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnUpdateActionPerformed(evt); } }); add(btnUpdate); btnUpdate.setBounds(310, 340, 90, 33); }// </editor-fold> //GEN-END:initComponents private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) { String name = tfdName.getText(); String addr = tfdAddr.getText(); String ageStr = tfdAge.getText(); String newStr = name + " , " + ageStr + " , " + addr; boolean flag = false; MySet set = new MySet(); flag = set.upDate(oldStr, newStr); if (flag) { mainFrame.setContentPane(new ListPanel(mainFrame)); mainFrame.validate(); } else { JOptionPane.showMessageDialog(this, "修改失败"); } } private void btnBackActionPerformed(java.awt.event.ActionEvent evt) { mainFrame.setContentPane(new ListPanel(mainFrame)); mainFrame.validate(); } private void tfdAgeActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } //GEN-BEGIN:variables // Variables declaration - do not modify private javax.swing.JButton btnBack; private javax.swing.JButton btnUpdate; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabelAddr; private javax.swing.JLabel jLabelAge; private javax.swing.JLabel jLabelName1; private javax.swing.JTextField tfdAddr; private javax.swing.JTextField tfdAge; private javax.swing.JTextField tfdName; // End of variables declaration//GEN-END:variables }
注:我这个程序的逻辑层和数据层都没有按照面向接口的原则写接口、实现类和工厂类,我这里只是为了表现这样一种设计思想,关于这种分层的设计模式详情请见本博客的“Java之------常用的设计模式”点击打开链接里面的工厂模式
逻辑层(business层)
MySet.java
package cn.hncu.business; import javax.swing.JOptionPane; import cn.hncu.dao.DaoFile; public class MySet { final String FileName="dao.data"; public static Object objs[]=new Object[0]; public boolean contains(Object obj){ for (Object o:objs){ if (o.equals(obj)){ return true; } } return false; } public boolean add(Object o){ if (contains(o)){ return false; } Object temp[]=new Object[objs.length+1]; System.arraycopy(objs, 0, temp, 0, objs.length); temp[objs.length]=o; objs=temp; boolean result=save(); return result; } public boolean delete(Object obj){ if (!contains(obj)){ return false; } Object tempObj[]=new Object[objs.length-1]; int k=0; for (int i=0;i<objs.length;i++){ if (!objs[i].equals(obj)){ tempObj[k++]=objs[i]; } } objs=tempObj; boolean result=save(); return result; } public boolean upDate(Object oldObj,Object newObj){ for (int i=0;i<objs.length;i++){ if (objs[i].equals(oldObj)){ objs[i]=newObj; boolean result=save(); return result; } } return false; } public Object[] Query(String nameStr,String ageStr,String addrStr){ Object tempObj[]=new Object[objs.length]; int k=0; for (int i=0;i<tempObj.length;i++){ String strObj=(String) objs[i]; String strs[]=strObj.split(","); if (nameStr!=null&&nameStr.trim().length()>0){ if (!strs[0].contains(nameStr)){ continue; } } if (ageStr!=null&&ageStr.trim().length()>0){ if (!strs[1].equals(ageStr)){ continue; } } if (addrStr!=null&&addrStr.trim().length()>0){ if (!strs[2].contains(addrStr)){ continue; } } tempObj[k++]=objs[i]; } Object tempObj2[]=new Object[k]; for (int i=0;i<k;i++){ tempObj2[i]=tempObj[i]; } return tempObj2; } public Object[] getAll(){ objs=DaoFile.read(FileName); return objs; } public boolean save(){ boolean result=DaoFile.write(FileName, objs); if (result==false){ JOptionPane.showMessageDialog(null, "Data saving failed!"); return false; } return true; } }数据层
DaoFile.java
package cn.hncu.dao; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; public class DaoFile { public static Object[] read(String fileName){ ArrayList<Object> list=new ArrayList<Object>(); ObjectInputStream in=null; try { in=new ObjectInputStream(new FileInputStream(fileName)); Object obj=null; //※※对象流的读不能用available()来判断,而应该用异常来确定是否读到结束 while (true){ obj=in.readObject(); list.add(obj); } } catch (Exception e) { //读到文件末尾,就是出异常,通过这来判断是否读到结束。 //因此,本程序中,这里是正常的文件读取结束,不是我们之前认为的出异常--所以不输出异常信息 e.printStackTrace(); } finally { if (in!=null){ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } Object objs[]=list.toArray(); if (objs==null){ objs=new Object[0]; } return objs; } public static boolean write(String fileName,Object objs[]){ ObjectOutputStream out=null; try { out=new ObjectOutputStream(new FileOutputStream(fileName)); for (Object o:objs){ out.writeObject(o); } } catch (IOException e) { e.printStackTrace(); return false; } finally { if (out!=null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } return true; } }
标签:
原文地址:http://blog.csdn.net/x121850182/article/details/51489361