1. 程式人生 > >java之 ------ 設計思想

java之 ------ 設計思想

eth 刪除 出現 語言 net back sin dsm 相關信息

java的設計思想


(設計思想。是須要不斷領悟的。。


一、封裝

學java的人都知道這是向對象的編程語言,從字面上理解,就是針對對象的一些操作,將具有某一特性的實體封裝成一個類或者是將具有一定功能的方法,抽取出來封裝成一個供外面調用的方法,然後通過new這個類或方法生成對象,最後通

過對對象進行操作或者實現對應的功能。

如將一個人封裝成一個人的類。人有屬性:性別,年齡,出生日期。家庭住址等,外界對人進行操作時。僅僅能改變其屬性值。可是不能改變屬性的種類,這要更安全。並且當對人進行操作時。也是連帶屬性

一起進行操作,這就是面向對象的編程。

所以java的設計思想一般離不開封裝。如做一個項目,首先對項目的每一個子系統進行封裝。然後對子系統中的每一個模塊進行封裝,最後對每一個模塊中的每一個組件(組件:能完畢某一特定功能的方法)進行封裝,這裏的子系統、模塊、組件都是

一個封裝體。這樣做不僅能使項目做起來更加有條理。更加安全,並且讓後面的維護和更改更加方便、簡單、易操作。

(後面有項目的實例)


二、設計的基本原則

★ 面向接口編程

a、這是Java編程裏面大家公認的第一原則。

b、接口非常重要的一個功能:封裝隔離

c、接口是功能塊或封裝塊的外觀

接口及相關機制最主要的作用:通過接口能夠實現不相關類的同樣行為,而不須要考慮這些類之間的層次關系。

依據接口能夠了解對象的交互界面,而不須要了解對象所屬的類

面向對象程序設計講究“提高內聚,松散耦合”,那麽不同的程序模塊怎麽相互訪問呢,就是通過接口。也就是接口是各部分對外的統一外觀。接口在Java程序設計中體現的思想就是封裝隔離

,由於接口僅僅是描寫敘述一個統一的行為,所以開發者在面

向接口編程時並不關心詳細的實現。

由以上講到的接口的作用和基本思想能夠看到。接口在面向對象的Java程序設計中占有舉足輕重的地位。其實在設計階段最重要的任務之中的一個就是設計出各部分的接口。然後通過接口的組合。形成程序的基本框架結構。


註:對於行為模型,優先選用接口,盡量少用抽象類

既為約束子類的功能,又要提供一些公共的功能。就選用抽象類

★ 優先使用對象組合而非類繼承

★ 分層

最典型的:三層結構

技術分享

① 表現層功能:展示數據、人機交互、收集參數調用邏輯層。


② 邏輯層功能:進行數據的邏輯校驗、進行邏輯推斷、實現業務功能、處理相關功能、處理興許流程、組織數據返回給表現層。


③ 數據層功能:實現數據持久化、實現對象和持久化數據的雙向映射。

★ 層間交互的基本原則

① 表現層調用邏輯層,邏輯層調用數據層。不能夠反過來。

② 層間交互也應該通過接口進行調用,以確保各層的實現獨立變化。

★ 開閉原則

簡單點說就是對新增開放。對改動關閉。並且應盡量做到不用改動模塊的源碼,就能更改模塊的行為。


★ 依賴性倒置原則

這個原則就是依賴抽象而不要依賴詳細實現。


★ 接口隔離原則

這個原則就是不要使用通用的接口。而是為不同的用戶使用不同的接口。


★ 替換原則

這個原則就是子類應當可以替換父類並出如今父類可以出現的不論什麽地方。



三、大神們的基本經驗

★ 類要單一

所設計的類功能要單一 。一個類應該是描寫敘述一類極其相關的屬性和方法。

★ 加強內聚。松散耦合

指一個類。可以在自己內部實現的功能就自己內部實現,不要去調其他類,盡量降低與其他類的依賴關系。


★ 好的封裝性

不必對外開放的部分,一律不正確外開放。假設在不確定屬性權限的情況下,先把類的屬性設成private,用的時候再開。

★ 類的粒度要合理

Java規範中建議。一個類的大小不要超過1000行,一個方法的大小不要超過100行。

★ 實現類不能依賴它的使用類

一個類依賴(使用或調用)了還有一個類,那麽在還有一個類中就不能反過來再依賴當前類。

★ 應考慮靈活性,也就是可配置、可維護

用戶的需求是會不斷改變的,後期的改動與維護是不可避免的。因此軟件開發時就要考慮靈活性。

★ 要考慮性能,考慮可伸縮性

要權衡速度與資源耗費之間的關系。要考慮軟件可以在一定範圍內可伸縮。

★ 要考慮今後可能的變化。也就是可擴展性

可擴展性指該應用程序可以非常方便地加入新的功能。

★ 要考慮合理的復用

要盡量考慮復用,但也不能光考慮復用,不能把其他的設計原則都丟掉了。

★ 要合理的考慮接口和抽象類的使用

優先使用接口,假設既想約束子類的行為,又要為子類提供公共的功能時,採用抽象類。

★ 盡量降低類與協作類的交互次數和交互信息的量

類之間不要重復地調用。不要每次傳非常多的數據。

★ 父類不應知道子類的信息。子類必須知道父類的信息

★ 訪問對象必須通過接口,不能繞過接口直接去訪問


四、實例

功能:圖形界面的個人信息管理系統,實現增、刪、改、查等功能,並且將相關信息存在文件裏。

設計思想:每一個功能一個模塊。也就是一個封裝體。

表現層:

addressApp.java(主界面)

設置界面的大體框架。如菜單,和面板。標題等

package cn.hncu.addressManage;

import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Event;
import java.awt.BorderLayout;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.KeyStroke;
import java.awt.Point;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JFrame;
import javax.swing.JDialog;

import cn.hncu.addressManage.UI.ListPanel;


public class addressApp {

	private JFrame jFrame = null;
	private JPanel jContentPane = null;
	private JMenuBar jJMenuBar = null;
	private JMenu fileMenu = null;
	private JMenu editMenu = null;
	private JMenu helpMenu = null;
	private JMenuItem exitMenuItem = null;
	private JMenuItem aboutMenuItem = null;
	private JMenuItem cutMenuItem = null;
	private JMenuItem copyMenuItem = null;
	private JMenuItem pasteMenuItem = null;
	private JMenuItem saveMenuItem = null;
	private JDialog aboutDialog = null;
	private JPanel aboutContentPane = null;
	private JLabel aboutVersionLabel = null;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				addressApp application = new addressApp();
				application.getJFrame().setVisible(true);
			}
		});
	}

	/**
	 * This method initializes jFrame
	 * 
	 * @return javax.swing.JFrame
	 */
	private JFrame getJFrame() {
		if (jFrame == null) {
			jFrame = new JFrame();
			jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			jFrame.setJMenuBar(getJJMenuBar());
			jFrame.setSize(800, 650);
			jFrame.setContentPane(getJContentPane());
			jFrame.setTitle("Application");
		}
		return jFrame;
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			//把我們的ListPanel加到jContentPane中
			jContentPane.add(new ListPanel(jFrame,null,false));
			//jContentPane.remove(listPanel)
		}
		return jContentPane;
	}

	/**
	 * This method initializes jJMenuBar	
	 * 	
	 * @return javax.swing.JMenuBar	
	 */
	private JMenuBar getJJMenuBar() {
		if (jJMenuBar == null) {
			jJMenuBar = new JMenuBar();
			jJMenuBar.add(getFileMenu());
			jJMenuBar.add(getEditMenu());
			jJMenuBar.add(getHelpMenu());
		}
		return jJMenuBar;
	}

	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getFileMenu() {
		if (fileMenu == null) {
			fileMenu = new JMenu();
			fileMenu.setText("File");
			fileMenu.add(getSaveMenuItem());
			fileMenu.add(getExitMenuItem());
		}
		return fileMenu;
	}

	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getEditMenu() {
		if (editMenu == null) {
			editMenu = new JMenu();
			editMenu.setText("Edit");
			editMenu.add(getCutMenuItem());
			editMenu.add(getCopyMenuItem());
			editMenu.add(getPasteMenuItem());
		}
		return editMenu;
	}

	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getHelpMenu() {
		if (helpMenu == null) {
			helpMenu = new JMenu();
			helpMenu.setText("Help");
			helpMenu.add(getAboutMenuItem());
		}
		return helpMenu;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getExitMenuItem() {
		if (exitMenuItem == null) {
			exitMenuItem = new JMenuItem();
			exitMenuItem.setText("Exit");
			exitMenuItem.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					System.exit(0);
				}
			});
		}
		return exitMenuItem;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getAboutMenuItem() {
		if (aboutMenuItem == null) {
			aboutMenuItem = new JMenuItem();
			aboutMenuItem.setText("About");
			aboutMenuItem.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					JDialog aboutDialog = getAboutDialog();
					aboutDialog.pack();
					Point loc = getJFrame().getLocation();
					loc.translate(20, 20);
					aboutDialog.setLocation(loc);
					aboutDialog.setVisible(true);
				}
			});
		}
		return aboutMenuItem;
	}

	/**
	 * This method initializes aboutDialog	
	 * 	
	 * @return javax.swing.JDialog
	 */
	private JDialog getAboutDialog() {
		if (aboutDialog == null) {
			aboutDialog = new JDialog(getJFrame(), true);
			aboutDialog.setTitle("About");
			aboutDialog.setContentPane(getAboutContentPane());
		}
		return aboutDialog;
	}

	/**
	 * This method initializes aboutContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getAboutContentPane() {
		if (aboutContentPane == null) {
			aboutContentPane = new JPanel();
			aboutContentPane.setLayout(new BorderLayout());
			aboutContentPane.add(getAboutVersionLabel(), BorderLayout.CENTER);
		}
		return aboutContentPane;
	}

	/**
	 * This method initializes aboutVersionLabel	
	 * 	
	 * @return javax.swing.JLabel	
	 */
	private JLabel getAboutVersionLabel() {
		if (aboutVersionLabel == null) {
			aboutVersionLabel = new JLabel();
			aboutVersionLabel.setText("Version 1.0");
			aboutVersionLabel.setHorizontalAlignment(SwingConstants.CENTER);
		}
		return aboutVersionLabel;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getCutMenuItem() {
		if (cutMenuItem == null) {
			cutMenuItem = new JMenuItem();
			cutMenuItem.setText("Cut");
			cutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
					Event.CTRL_MASK, true));
		}
		return cutMenuItem;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getCopyMenuItem() {
		if (copyMenuItem == null) {
			copyMenuItem = new JMenuItem();
			copyMenuItem.setText("Copy");
			copyMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
					Event.CTRL_MASK, true));
		}
		return copyMenuItem;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getPasteMenuItem() {
		if (pasteMenuItem == null) {
			pasteMenuItem = new JMenuItem();
			pasteMenuItem.setText("Paste");
			pasteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
					Event.CTRL_MASK, true));
		}
		return pasteMenuItem;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getSaveMenuItem() {
		if (saveMenuItem == null) {
			saveMenuItem = new JMenuItem();
			saveMenuItem.setText("Save");
			saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
					Event.CTRL_MASK, true));
		}
		return saveMenuItem;
	}

}
技術分享

ListPanel.java

清單面板,包含數據的顯示,和數據的相關操作button

package cn.hncu.addressManage.UI;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

import cn.hncu.addressManage.business.MySet;
import cn.hncu.utils.Panels;



public class ListPanel extends JPanel {

	private static final long serialVersionUID = 1L;
	private JLabel jLabel = null;
	private JButton btnToAdd = null;
	private JFrame jf=null;
	private JList jListAddress = null;
	private JButton btnToUpdate = null;
	private JButton btnToDelete = null;
	private JButton btnToQuery = null;
	
	private Object objs[];  //  @jve:decl-index=0:
	private boolean isQuery;
	
	
	/**
	 * This is the default constructor
	 */
	public ListPanel(JFrame jf,Object objs[],boolean isQuery) {
		super();
		this.jf = jf;
		
		this.objs = objs;
		this.isQuery = isQuery;
		
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		jLabel = new JLabel();
		jLabel.setBounds(new Rectangle(294, 39, 202, 39));
		jLabel.setFont(new Font("Dialog", Font.BOLD, 24));
		jLabel.setForeground(Color.red);
		jLabel.setHorizontalAlignment(SwingConstants.CENTER);
		jLabel.setText("我的地址本信息");
		this.setSize(800, 600);
		this.setLayout(null);
		this.add(jLabel, null);
		this.add(getBtnToAdd(), null);
		this.add(getJListAddress(), null);
		this.add(getBtnToUpdate(), null);
		this.add(getBtnToDelete(), null);
		this.add(getBtnToQuery(), null);
	}

	/**
	 * This method initializes btnToAdd	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnToAdd() {
		if (btnToAdd == null) {
			btnToAdd = new JButton();
			btnToAdd.setFont(new Font("Dialog", Font.BOLD, 18));
			btnToAdd.setSize(new Dimension(120, 41));
			btnToAdd.setLocation(new Point(83, 448));
			btnToAdd.setMnemonic(KeyEvent.VK_UNDEFINED);
			btnToAdd.setText("轉到新增");
			btnToAdd.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//界面切換
					jf.getContentPane().removeAll();
					jf.getContentPane().add(new AddPanel( jf ));
					jf.getContentPane().validate();
				}
			});
		}
		return btnToAdd;
	}

	/**
	 * This method initializes jListAddress	
	 * 	
	 * @return javax.swing.JList	
	 */
	private JList getJListAddress() {
		if (jListAddress == null) {
			jListAddress = new JList();
			jListAddress.setBounds(new Rectangle(181, 116, 369, 216));
			
			//為列表加入內容
			if(!this.isQuery){
				MySet mySet = new MySet();
				objs= mySet.getAll();
			}
			jListAddress.setListData(objs);
			
		}
		return jListAddress;
	}

	/**
	 * This method initializes btnToUpdate	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnToUpdate() {
		if (btnToUpdate == null) {
			btnToUpdate = new JButton();
			btnToUpdate.setBounds(new Rectangle(259, 446, 126, 46));
			btnToUpdate.setFont(new Font("Dialog", Font.BOLD, 18));
			btnToUpdate.setText("轉到改動");
			btnToUpdate.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					String updateStr = (String)jListAddress.getSelectedValue();
					if(updateStr==null){
						Panels.changePanel(jf, new ErrorPanel(jf,ListPanel.this));
					}else{
						//界面切換
						jf.getContentPane().removeAll();
						jf.getContentPane().add(new UpdatePanel( jf,updateStr ));
						jf.getContentPane().validate();
					}
				}
			});
		}
		return btnToUpdate;
	}

	/**
	 * This method initializes btnToDelete	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnToDelete() {
		if (btnToDelete == null) {
			btnToDelete = new JButton();
			btnToDelete.setBounds(new Rectangle(429, 446, 124, 46));
			btnToDelete.setFont(new Font("Dialog", Font.BOLD, 18));
			btnToDelete.setText("轉到刪除");
			btnToDelete.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
//					jf.getContentPane().removeAll();
//					jf.getContentPane().add(new DeletePanel());
//					jf.getContentPane().validate();
					
					String deleteStr = (String)(jListAddress.getSelectedValue());
					if(deleteStr==null){
						Panels.changePanel(jf, new ErrorPanel(jf,ListPanel.this));
					}else{
						//System.out.println(deleteStr);
						Panels.changePanel(jf, new DeletePanel(jf,deleteStr));
					}
				}
			});
		}
		return btnToDelete;
	}

	/**
	 * This method initializes btnToQuery	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnToQuery() {
		if (btnToQuery == null) {
			btnToQuery = new JButton();
			btnToQuery.setBounds(new Rectangle(617, 445, 121, 46));
			btnToQuery.setFont(new Font("Dialog", Font.BOLD, 18));
			btnToQuery.setText("轉到查詢");
			btnToQuery.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Panels.changePanel(jf, new QueryPanel(jf));
				}
			});
		}
		return btnToQuery;
	}

}
AddPanel.java

當點擊加入button時,就會跳到這個面板中

package cn.hncu.addressManage.UI;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import java.awt.Rectangle;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import cn.hncu.addressManage.business.MySet;


public class AddPanel extends JPanel {

	private static final long serialVersionUID = 1L;
	private JLabel jLabel = null;
	private JLabel jLabel1 = null;
	private JTextField tfdName = null;
	private JLabel jLabel2 = null;
	private JTextField tfdAge = null;
	private JLabel jLabel3 = null;
	private JTextField tfdAddress = null;
	private JButton btnAdd = null;
	private JButton btnBack = null;

	private JFrame mainFrame = null;
	
	/**
	 * This is the default constructor
	 */
	public AddPanel(JFrame mainFrame) {
		super();
		this.mainFrame = mainFrame;
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		jLabel3 = new JLabel();
		jLabel3.setBounds(new Rectangle(111, 292, 57, 35));
		jLabel3.setFont(new Font("Dialog", Font.BOLD, 18));
		jLabel3.setText("地址:");
		jLabel2 = new JLabel();
		jLabel2.setBounds(new Rectangle(109, 222, 54, 44));
		jLabel2.setFont(new Font("Dialog", Font.BOLD, 18));
		jLabel2.setText("年齡:");
		jLabel1 = new JLabel();
		jLabel1.setBounds(new Rectangle(112, 147, 51, 45));
		jLabel1.setFont(new Font("Dialog", Font.BOLD, 18));
		jLabel1.setText("姓名:");
		jLabel = new JLabel();
		jLabel.setBounds(new Rectangle(339, 41, 160, 49));
		jLabel.setFont(new Font("Dialog", Font.BOLD, 24));
		jLabel.setForeground(Color.red);
		jLabel.setHorizontalAlignment(SwingConstants.CENTER);
		jLabel.setForeground(Color.blue);
		jLabel.setText("地址本加入");
		this.setSize(800, 600);
		this.setLayout(null);
		this.add(jLabel, null);
		this.add(jLabel1, null);
		this.add(getTfdName(), null);
		this.add(jLabel2, null);
		this.add(getTfdAge(), null);
		this.add(jLabel3, null);
		this.add(getTfdAddress(), null);
		this.add(getBtnAdd(), null);
		this.add(getBtnBack(), null);
	}

	/**
	 * This method initializes tfdName	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTfdName() {
		if (tfdName == null) {
			tfdName = new JTextField();
			tfdName.setBounds(new Rectangle(191, 148, 145, 47));
		}
		return tfdName;
	}

	/**
	 * This method initializes tfdAge	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTfdAge() {
		if (tfdAge == null) {
			tfdAge = new JTextField();
			tfdAge.setBounds(new Rectangle(187, 223, 153, 45));
		}
		return tfdAge;
	}

	/**
	 * This method initializes tfdAddress	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTfdAddress() {
		if (tfdAddress == null) {
			tfdAddress = new JTextField();
			tfdAddress.setBounds(new Rectangle(184, 290, 215, 41));
		}
		return tfdAddress;
	}

	/**
	 * This method initializes btnAdd	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnAdd() {
		if (btnAdd == null) {
			btnAdd = new JButton();
			btnAdd.setSize(new Dimension(134, 49));
			btnAdd.setText("新增");
			btnAdd.setFont(new Font("Dialog", Font.BOLD, 18));
			btnAdd.setLocation(new Point(112, 388));
			btnAdd.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					add(); // TODO Auto-generated Event stub actionPerformed()
				}
			});
		}
		return btnAdd;
	}
	private JButton getBtnBack() {
		if (btnBack == null) {
			btnBack = new JButton();
			btnBack.setSize(new Dimension(134, 49));
			btnBack.setText("返回");
			btnBack.setFont(new Font("Dialog", Font.BOLD, 18));
			btnBack.setLocation(new Point(445, 387));
			btnBack.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					back(); 
				}
			});
		}
		return btnBack;
	}
	
	//把全部的處理方法寫在這裏
	//地址信息加入
	private void add(){
		//1收集參數
		String name = tfdName.getText();
		String age = tfdAge.getText();
		int iAge = 0;
		try {
			iAge = Integer.parseInt(age);
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(this, "年齡數據格式錯誤!!");
			return;
		}
		String address = tfdAddress.getText();
		
		//2組織參數
		String str = name +","+iAge+","+address;
		
		//3調用邏輯層
		MySet mySet = new MySet();
		boolean flag = mySet.add(str);
		
		//4依據邏輯層的返回結果,導向不同的頁面
		if(flag){//加入成功,返回到ListPanel界面進行顯示
			back();
		}else{
			this.mainFrame.getContentPane().removeAll();
			this.mainFrame.getContentPane().add(new ErrorPanel(mainFrame,this));
			this.mainFrame.getContentPane().validate();
		}
		
	}

	//返回到主界面
	private void back() {
		this.mainFrame.getContentPane().removeAll();
		this.mainFrame.getContentPane().add(new ListPanel(this.mainFrame,null,false));
		this.mainFrame.getContentPane().validate();
	}
	
}

技術分享

UpdatePanel.java

改動面板

package cn.hncu.addressManage.UI;

import java.awt.Font;
import java.awt.Rectangle;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import cn.hncu.addressManage.business.MySet;


public class UpdatePanel extends JPanel {

	private static final long serialVersionUID = 1L;
	private JLabel jLabel = null;
	private JTextField tfdName = null;
	private JLabel jLabel1 = null;
	private JTextField tfdAge = null;
	private JLabel jLabel2 = null;
	private JTextField tfdAddress = null;
	private JButton btnUpdate = null;
	private JButton btnBack = null;

	private JFrame mainFrame=null;
	private String updateStr="";  //  @jve:decl-index=0:
	private String strs[];
	
	public UpdatePanel(JFrame mainFrame, String updateStr) {
		super();
		this.mainFrame = mainFrame;
		this.updateStr = updateStr;
		strs = updateStr.split(",");
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		jLabel2 = new JLabel();
		jLabel2.setBounds(new Rectangle(121, 281, 56, 45));
		jLabel2.setFont(new Font("Dialog", Font.BOLD, 18));
		jLabel2.setText("地址:");
		jLabel1 = new JLabel();
		jLabel1.setBounds(new Rectangle(123, 183, 56, 45));
		jLabel1.setFont(new Font("Dialog", Font.BOLD, 18));
		jLabel1.setText("年齡:");
		jLabel = new JLabel();
		jLabel.setBounds(new Rectangle(129, 96, 49, 41));
		jLabel.setFont(new Font("Dialog", Font.BOLD, 18));
		jLabel.setText("姓名:");
		this.setSize(800, 600);
		this.setLayout(null);
		this.add(jLabel, null);
		this.add(getTfdName(), null);
		this.add(jLabel1, null);
		this.add(getTfdAge(), null);
		this.add(jLabel2, null);
		this.add(getTfdAddress(), null);
		this.add(getBtnUpdate(), null);
		this.add(getBtnBack(), null);
	}

	/**
	 * This method initializes tfdName	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTfdName() {
		if (tfdName == null) {
			tfdName = new JTextField();
			tfdName.setBounds(new Rectangle(191, 96, 139, 48));
			
			tfdName.setText(strs[0]);
		}
		return tfdName;
	}

	/**
	 * This method initializes tfdAge	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTfdAge() {
		if (tfdAge == null) {
			tfdAge = new JTextField();
			tfdAge.setBounds(new Rectangle(197, 180, 140, 53));
			
			//應該解析,異常處理
			tfdAge.setText(strs[1]);
		}
		return tfdAge;
	}

	/**
	 * This method initializes tfdAddress	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTfdAddress() {
		if (tfdAddress == null) {
			tfdAddress = new JTextField();
			tfdAddress.setBounds(new Rectangle(196, 280, 160, 51));
			
			tfdAddress.setText(strs[2]);
		}
		return tfdAddress;
	}

	/**
	 * This method initializes btnUpdate	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnUpdate() {
		if (btnUpdate == null) {
			btnUpdate = new JButton();
			btnUpdate.setBounds(new Rectangle(119, 403, 122, 48));
			btnUpdate.setFont(new Font("Dialog", Font.BOLD, 18));
			btnUpdate.setText("改動");
			btnUpdate.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					update();
				}

			});
		}
		return btnUpdate;
	}

	/**
	 * This method initializes btnBack	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnBack() {
		if (btnBack == null) {
			btnBack = new JButton();
			btnBack.setBounds(new Rectangle(354, 402, 127, 51));
			btnBack.setFont(new Font("Dialog", Font.BOLD, 18));
			btnBack.setText("返回");
			btnBack.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					back();
				}
			});
		}
		return btnBack;
	}

	//返回到主界面
	private void back() {
		this.mainFrame.getContentPane().removeAll();
		this.mainFrame.getContentPane().add(new ListPanel(this.mainFrame,null,false));
		this.mainFrame.getContentPane().validate();
	}
	
	//////////////程序的邏輯處理方法///////////////
	/**
	 * 記錄改動的事件處理方法
	 */
	private void update() {
		//1收集參數
		String name = tfdName.getText();
		String age = tfdAge.getText();
		int iAge = 0;
		try {
			iAge = Integer.parseInt(age);
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(this, "年齡數據格式錯誤!!");
			return;
		}
		String address = tfdAddress.getText();
		
		//2組織參數
		String str = name +","+iAge+","+address;
		
		//3調用邏輯層
		MySet mySet = new MySet();
		boolean flag = mySet.update(str,updateStr);
		
		//4依據邏輯層的返回結果,導向不同的頁面
		if(flag){//改動成功,返回到ListPanel界面進行顯示
			back();
		}else{
			//假設改動後的記錄在mySet中已存在,則返回false,導向出錯頁面.
			//假設被改動的記錄不存在,也是返回false。導向出錯頁面
			this.mainFrame.getContentPane().removeAll();
			this.mainFrame.getContentPane().add(new ErrorPanel(mainFrame,this));
			this.mainFrame.getContentPane().validate();
		}
	}
}

技術分享

DeletePanel.java

刪除面板

package cn.hncu.addressManage.UI;

import java.awt.Font;
import java.awt.Rectangle;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import cn.hncu.addressManage.business.MySet;
import cn.hncu.utils.Panels;



public class DeletePanel extends JPanel {

	private static final long serialVersionUID = 1L;
	private JLabel jLabel = null;
	private JLabel jLabel1 = null;
	private JTextField tfdName = null;
	private JLabel jLabel2 = null;
	private JTextField tfdAge = null;
	private JLabel jLabel3 = null;
	private JTextField tfdAddress = null;
	private JButton btnDelete = null;
	private JButton btnBack = null;

	private JFrame mainFrame = null;
	private String strs[] = null;
	private String deleteStr="";  //  @jve:decl-index=0:
	/**
	 * This is the default constructor
	 */
	public DeletePanel(JFrame mainFrame, String deleteStr) {
		super();
		this.mainFrame = mainFrame;
		this.deleteStr = deleteStr;
		strs = deleteStr.split(",");
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		jLabel3 = new JLabel();
		jLabel3.setBounds(new Rectangle(167, 323, 58, 32));
		jLabel3.setFont(new Font("Dialog", Font.BOLD, 18));
		jLabel3.setText("地址:");
		jLabel2 = new JLabel();
		jLabel2.setBounds(new Rectangle(164, 242, 53, 43));
		jLabel2.setFont(new Font("Dialog", Font.BOLD, 18));
		jLabel2.setText("年齡:");
		jLabel1 = new JLabel();
		jLabel1.setBounds(new Rectangle(166, 161, 58, 45));
		jLabel1.setFont(new Font("Dialog", Font.BOLD, 18));
		jLabel1.setText("姓名:");
		jLabel = new JLabel();
		jLabel.setBounds(new Rectangle(377, 67, 182, 53));
		jLabel.setFont(new Font("Dialog", Font.BOLD, 24));
		jLabel.setHorizontalAlignment(SwingConstants.CENTER);
		jLabel.setText("刪除地址");
		
		this.setSize(800, 600);
		this.setLayout(null);
		this.add(jLabel, null);
		this.add(jLabel1, null);
		this.add(getTfdName(), null);
		this.add(jLabel2, null);
		this.add(getTfdAg

java之 ------ 設計思想