`
dyccsxg
  • 浏览: 201869 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类

基于RMI的客户管理程序

    博客分类:
  • Java
阅读更多

参考:http://book.csdn.net/bookfiles/269/10026911932.shtml

运行效果:

 

 

// mvc.view.StoreGUI.java

 

package mvc.view;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.awt.event.WindowListener;
import java.io.Serializable;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.DefaultCaret;

import data.Customer;

/**
 *@date 2010-3-14 下午05:12:35
 *@author dycc
 *@file mvc.view.StoreGUI.java
 */
public class StoreGUI implements Serializable{
	/**
     * 
     */
    private static final long serialVersionUID = 1L;
	// 界面的主要窗体组件
	protected JFrame frame;
	protected JTabbedPane tabbedPane = new JTabbedPane();
	protected JPanel logPanel = new JPanel();
	// 单个客户面板及组件
	protected JPanel pan_singleCust = new JPanel();
	protected JLabel lab_id = new JLabel("id:",SwingConstants.RIGHT);
	protected JLabel lab_name = new JLabel("客户姓名:",SwingConstants.RIGHT);
	protected JLabel lab_address = new JLabel("客户地址:",SwingConstants.RIGHT);
	protected JLabel lab_age = new JLabel("年    龄:",SwingConstants.RIGHT);
	protected JTextField txt_id = new JTextField(32);
	protected JTextField txt_name = new JTextField(32);
	protected JTextField txt_address = new JTextField(32);
	protected JTextField txt_age = new JTextField(32);
	protected JButton btn_add = new JButton("添加客户");
	protected JButton btn_del = new JButton("删除客户");
	protected JButton btn_get = new JButton("查询客户");
	protected JButton btn_upd = new JButton("更新客户");
	// 所有客户面板及组件
	protected JPanel pan_allCust = new JPanel();
	protected JLabel lab_allCust = new JLabel("所有客户清单",SwingConstants.CENTER);
	protected JScrollPane srp_tab;
	protected JTable tab;
	protected String[] tab_header = new String[]{"id","姓名","地址","年龄"};
	protected DefaultTableModel tabM;
	// 日志面板及组件
	protected JLabel lab_log = new JLabel("日志信息",SwingConstants.CENTER);
	protected JTextArea txA_log = new JTextArea(9,50);
	protected JScrollPane srp_log = new JScrollPane(txA_log);
	
	/**
	 * 构造方法
	 */
	public StoreGUI(){
		JFrame.setDefaultLookAndFeelDecorated(true);
		buildDisplay();
	}
	/**
	 * 创建主窗体
	 */
	public void buildDisplay(){
		tabbedPane.add("客户详细信息", createSingleCust());
		tabbedPane.add("所有客户清单",createdAllCust());
		logPanel.setLayout(new BorderLayout());
		logPanel.add(lab_log,BorderLayout.NORTH);
		logPanel.add(srp_log,BorderLayout.CENTER);
		DefaultCaret caret = (DefaultCaret)txA_log.getCaret();
		caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);      // 设置为自动滚动
		
		frame = new JFrame("客户管理系统");
		frame.setSize(600, 400);
		
		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints cons = new GridBagConstraints();
		cons.fill = GridBagConstraints.BOTH;
		
		Container content_panel = frame.getContentPane();
		content_panel.setLayout(gridbag);
		
		cons.gridx = 0;
		cons.gridy = 0;
		cons.weightx = 1.0;
		cons.weighty = 0.6;
		gridbag.setConstraints(tabbedPane, cons);
		content_panel.add(tabbedPane);
		
		cons.gridy = 1;
		cons.weighty = 0.4;
		gridbag.setConstraints(logPanel, cons);
		content_panel.add(logPanel);
		// 此处必须设置为 DO_NOTHING_ON_CLOSE,否则窗体无法正常关闭
		frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		frame.setVisible(true);
		centerFrame(frame);
	}
	/**
	 * 创建客户详细信息 Panel
	 * @return
	 */
	public JPanel createSingleCust(){
		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints cons = new GridBagConstraints();
		
		cons.fill = GridBagConstraints.BOTH;
		cons.weighty = 0.20;
		
		pan_singleCust.setLayout(gridbag);
		
		cons.gridx = 0;
		cons.gridy = 0;
		cons.weightx = 0.25;
		cons.insets = new Insets(2,6,2,12);
		gridbag.setConstraints(lab_id, cons);
		pan_singleCust.add(lab_id);
		
		cons.gridy = 1;
		gridbag.setConstraints(lab_name, cons);
		pan_singleCust.add(lab_name);
		
		cons.gridy = 2;
		gridbag.setConstraints(lab_address, cons);
		pan_singleCust.add(lab_address);
		
		cons.gridy = 3;
		gridbag.setConstraints(lab_age, cons);
		pan_singleCust.add(lab_age);
		
		cons.gridx = 1;
		cons.gridy = 0;
		cons.gridwidth = 3;
		cons.weightx = 0.75;
		cons.insets = new Insets(0,0,0,0);
		gridbag.setConstraints(txt_id, cons);
		pan_singleCust.add(txt_id);
		
		cons.gridy = 1;
		gridbag.setConstraints(txt_name, cons);
		pan_singleCust.add(txt_name);
		
		cons.gridy = 2;
		gridbag.setConstraints(txt_address, cons);
		pan_singleCust.add(txt_address);
		
		cons.gridy = 3;
		gridbag.setConstraints(txt_age, cons);
		pan_singleCust.add(txt_age);
		
		cons.gridx = 0;
		cons.gridy = 4;
		cons.gridwidth = 1;
		cons.weightx = 0.25;
		gridbag.setConstraints(btn_add, cons);
		pan_singleCust.add(btn_add);
		
		cons.gridx = 1;
		gridbag.setConstraints(btn_del, cons);
		pan_singleCust.add(btn_del);
		
		cons.gridx = 2;
		gridbag.setConstraints(btn_get, cons);
		pan_singleCust.add(btn_get);
		
		cons.gridx = 3;
		gridbag.setConstraints(btn_upd, cons);
		pan_singleCust.add(btn_upd);
		return pan_singleCust;
	}
	/**
	 * 创建所有客户信息 Panel
	 * @return
	 */
	public JPanel createdAllCust(){
		pan_allCust.setLayout(new BorderLayout());
		
		tabM = new DefaultTableModel(tab_header,10);
		tab = new JTable(tabM);
		srp_tab = new JScrollPane(tab);
		tab.setRowHeight(32);
		tab.getTableHeader().setReorderingAllowed(false);  // 表头不可拖拽
		tab.getTableHeader().setResizingAllowed(true);     // 可调整列宽
		
		pan_allCust.add(lab_allCust,BorderLayout.NORTH);
		pan_allCust.add(srp_tab,BorderLayout.CENTER);
		
		return pan_allCust;
	}
	/**
	 * 居中显示窗体
	 * @param frame
	 */
	public void centerFrame(JFrame frame){
		double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
		double height = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
		int left = (int)(width - frame.getWidth())/2;
		int top = (int)(height - frame.getHeight())/2;
		frame.setLocation(left, top);
	}
	/**
	 * 添加 TabbedPanel 监听
	 * @param listener
	 */
	public void addTabChangeListener(ChangeListener listener){
		this.tabbedPane.addChangeListener(listener);
	}
	/**
	 * 添加 增删查改 监听
	 * @param listeners
	 */
	public void addCURDListener(ActionListener[] listeners){
		if(listeners.length != 4){
			return;
		}
		btn_add.addActionListener(listeners[0]);
		btn_del.addActionListener(listeners[1]);
		btn_get.addActionListener(listeners[2]);
		btn_upd.addActionListener(listeners[3]);
	}
	/**
	 * 添加窗体关闭监听
	 * @param listener
	 */
	public void addWindowListener(WindowListener listener){
		frame.addWindowListener(listener);
	}
	/**
	 * 销毁窗体
	 */
	public void destroyWindow(){
		frame.dispose();
		System.exit(0);
	}
	/**
	 * 更新客户数据
	 * @param customer
	 */
	public void refreshCustomer(Customer customer){
		if(customer == null || customer.getId() == -1){
			txt_id.setText("");
			txt_name.setText("");
			txt_address.setText("");
			txt_age.setText("");
		}else{
			txt_id.setText(((Long)customer.getId()).toString());
			txt_name.setText(customer.getName());
			txt_address.setText(customer.getAddress());
			txt_age.setText(((Integer)customer.getAge()).toString());
		}
	}
	/**
	 * 刷新所有客户信息
	 * @param custs
	 */
	public void refreshAllCustomer(List<Customer> custs){
		String[][] data = new String[custs.size()][4];
		for(int idx=0;idx < custs.size();idx++){
			Customer temp = custs.get(idx);
			data[idx][0] = new Long(temp.getId()).toString();
			data[idx][1] = temp.getName();
			data[idx][2] = temp.getAddress();
			data[idx][3] = new Integer(temp.getAge()).toString();
		}
		tabM.setDataVector(data,tab_header);
	}
	/**
	 * 获取当前 tab 页下标
	 * @param customer
	 */
	public int getTabbedIndex(){
		return tabbedPane.getSelectedIndex();
	}
	/**
	 * 更新日志
	 * @param msg
	 */
	public void updateLog(String msg){
		txA_log.append(msg + "\r\n");
		// 将光标置于最后
		txA_log.setCaretPosition(txA_log.getText().length());
	}
	/**
	 * 获取客户Id
	 * @return
	 */
	public long getCustomerId(){
		try{
			return Long.parseLong(txt_id.getText().trim());
		} catch(Exception e){
			updateLog(e.getMessage());
			return -1;
		}
	}
	/**
	 * 获取客户信息
	 * @return
	 */
	public Customer getCustomer(){
		try{
			Customer customer = new Customer();
			customer.setId(Long.parseLong(txt_id.getText().trim()));
			customer.setName(txt_name.getText().trim());
			customer.setAddress(txt_address.getText().trim());
			customer.setAge(Integer.parseInt(txt_age.getText().trim()));
			return customer;
		} catch(Exception e){
			updateLog(e.getMessage());
			return null;
		}
	}
}

 

附件中是完整的应用,导入到 eclipse 后,

先运行 mvc.server.StoreServer.java

再运行 mvc.client.StoreClient.java

 

分享到:
评论

相关推荐

    基于 RMI 的分布式议程服务

    使用 Java RMI 构建一个分布式议程服务(agenda service)。不同的客户应能连接到这一共享的议程服务,并查询、添加和删除议程中的会晤(meeting)安排。服务程序应具备新用户注册、清除某一用户所有会晤安排等管理...

    基于RMI的学生成绩查询系统设计与实现

    文中就学生成绩查询系统,提出了一个基于RMI技术的系统模型,以解决学校对学生成绩管理及学生对成绩查询的问题。文中采用分布式对象J2EE/RMI技术,完成了服务器程序和客户机程序的设计,实现了远程对象之间的无缝...

    java_rmi.rar_ java_rmi_distributed agenda_meeting java_rmi 议程_分布

    基于RMI的分布式议程服务。使用Java RMI构建一个分布式议程服务。不同的客户能连接到这一共享的议程服务,并查询、添加和删除议程中的会议安排。服务程序具备新用户注册、清除某一用户所有会晤安排等管理功能。

    JBuilder开发人员指南

    二六、探索JBuilder中基于RMI的Java分布式应用程序 二七、用Java定义CORBA接口 二八、调试分布式应用程序 二九、开发servlet 三○、JavaBean组件 三一、创建JavaBean概述 三二、用BeansExpress创建JavaBean 三三、...

    Java服务器程序设计

    用java进行客户端的applet (小程序)开发的技术已广为使用,而用java进行服务器端的servlet(服务器小程序)开发则尚需揭开其神秘的面纱,本书正是基于这样的目的编写的。全书从java服务器的体系结构、开发工具和...

    java教程.rar

    RMIClient.java 客户类的代码 第20章 示例描述:介绍并演示学生信息管理系统。 Info_Manage.java 学生信息管理系统的登录页面 AddStudent .java 增加信息页面 第21章 示例描述:介绍并演示网上书店系统。 ...

    Spring in Action(第2版)中文版

    5.6.1配置ibatis客户模板 5.6.2建立基于ibatis的dao 5.7缓存 5.7.1配置缓存方案 5.7.2缓存的代理bean 5.7.3注解驱动的缓存 5.8小结 第6章事务管理 6.1理解事务 6.1.1仅用4个词解释事务 6.1.2理解spring对...

    JINI核心技术

    12.2.3 实现管理代管程序 283 12.2.4 例子:管理LeaseService 284 12.3 为服务提供用户界面 291 12.4 小结 297 12.5 后面的内容 297 第13章 一个完整的例子:打印服务 298 13.1 打印服务的要求 298 13.2 服务开发者...

    Spring in Action(第二版 中文高清版).part2

    5.6.1 配置iBATIS客户模板 5.6.2 建立基于iBATIS的DAO 5.7 缓存 5.7.1 配置缓存方案 5.7.2 缓存的代理Bean 5.7.3 注解驱动的缓存 5.8 小结 第6章 事务管理 6.1 理解事务 6.1.1 仅用4个词解释事务 6.1.2 ...

    Spring in Action(第二版 中文高清版).part1

    5.6.1 配置iBATIS客户模板 5.6.2 建立基于iBATIS的DAO 5.7 缓存 5.7.1 配置缓存方案 5.7.2 缓存的代理Bean 5.7.3 注解驱动的缓存 5.8 小结 第6章 事务管理 6.1 理解事务 6.1.1 仅用4个词解释事务 6.1.2 ...

    JINI 核心技术

    12.2.3 实现管理代管程序 283 12.2.4 例子:管理LeaseService 284 12.3 为服务提供用户界面 291 12.4 小结 297 12.5 后面的内容 297 第13章 一个完整的例子:打印服务 298 13.1 打印服务的要求 298 13.2 服务开发者...

    深入Java Servlet网络编程

    2 基于Java解决方案的特点 第2章 Java Servlet简介 2. 1 Servlet生命周期 2. 2 Java Servlet API简介 2. 3 处理表单和返回数据的实例 2. 4 错误处理和日志记录 2. 4. 1 Java中的异常处理机制 2. 4. 2 在Java...

    超级有影响力霸气的Java面试题大全文档

    EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来...

    java 面试题 总结

    EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来...

    RED HAT LINUX 6大全

    2.5 Red Hat软件包管理程序 16 2.6 小结 16 第3章 LILO 17 3.1 安装与配置LILO 18 3.1.1 安装或重新配置LILO 18 3.1.2 配置LILO 18 3.2 使用LOADLIN.EXE引导Linux 20 3.3 如何卸载LILO 21 3.4 LILO 疑难解答 21 3.5 ...

    J2EE面试题

    两个客户依次使用浏览器浏览aa.jsp,且每个客户只浏览一次,那么,第2个客户的浏览器将显示什么? e a) 0 1 b) 1 2 c) 3 4 d) 5 6 e) 什么也没有 6) 如果用JSP开发一个聊天程序,不用数据库存储...

    Java并发编程(学习笔记).xmind

    远程方法调用(RMI) 正确协同多个对象中的共享状态 正确协同远程对象本身状态的访问 Swing和AWT 事件处理器与访问共享状态的其他代码都要采取线程安全的方式实现 框架通过在框架线程中调用...

    Spring攻略(第二版 中文高清版).part2

    10.7 将依赖注入带给你的ActionScript客户 434 10.7.1 问题 434 10.7.2 解决方案 434 10.7.3 工作原理 435 10.8 小结 439 第11章 Grails 441 11.1 获取和安装Grails 441 11.1.1 问题 441 11.1.2 ...

    Spring攻略(第二版 中文高清版).part1

    10.7 将依赖注入带给你的ActionScript客户 434 10.7.1 问题 434 10.7.2 解决方案 434 10.7.3 工作原理 435 10.8 小结 439 第11章 Grails 441 11.1 获取和安装Grails 441 11.1.1 问题 441 11.1.2 ...

Global site tag (gtag.js) - Google Analytics