`
dyccsxg
  • 浏览: 205274 次
  • 性别: 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

 

分享到:
评论

相关推荐

    基于Java RMI的分布式数据库系统的应用与研究.pdf

    Java RMI运行过程中能够实现客户程序与接口之间的交互,保证对象间的正常交互,不影响数据交换。此外,客户端还需通过编写具体程序实现与远程接口的交换,获取数据库连接池的使用权,并进行数据库操作。通过重用RMI...

    基于 RMI 的分布式议程服务

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

    基于MVC和RMI的分布式应用

    store应用是一个典型的基于MVC设计模式的Java应用,旨在实现一个商店的客户管理系统。它包含了创建、删除、更新客户信息以及查询和列出所有客户的功能。在这一应用中: - **模型**:负责存储和管理客户信息,如客户...

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

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

    JAVA RMI PDF

    ### 基于MVC和RMI的分布式应用——深入解析 #### 一、MVC设计模式概述 MVC,即Model-View-Controller(模型-视图-控制器),是一种广为人知的软件架构模式,最初由Xerox PARC在20世纪80年代为Smalltalk-80设计。...

    基于CORBA_JAVA RMI的分布式系统应用研究.pdf

    基于CORBA和JAVA RMI的分布式系统应用研究的目的是为了开发出一种基于Web的分布式管理系统,能够满足业务到业务和消费者到业务的多步骤交易过程中的复杂需求。该系统需要能够处理静态客户、非类型安全的交互、Web...

    java_rmi.rar_ java_rmi_distributed agenda_meeting java_rmi 议程_分布

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

    RMI教程(PPT)

    **RMI(Remote Method Invocation)教程** RMI是Java平台中的一种远程方法调用机制,它允许不同Java虚拟机(JVM)之间的对象进行通信,实现了跨...理解和掌握RMI能够帮助开发者更好地构建和管理复杂的分布式应用程序。

    RMI分布式消息传送模型.doc

    消息传送模块是基于RMI的核心部分,负责实现纯Java消息的分布式通信。它采用集中式体系结构,主要包括以下几个组件: 1. EDServer(消息分发服务器):作为中心节点,负责与消息客户端(如APP、外部AP)建立连接,...

    排队客户服务系统:具有使用RMI相互通信的独立元素的应用程序

    《排队客户服务系统:基于RMI的分布式架构解析》 排队客户服务系统是一种常见于银行、医院、售票处等场所的管理工具,它通过有效地组织服务流程,优化资源分配,提高客户满意度。在这个特定的系统中,采用了Java...

    数字化校园中基于Java数据交换的设计与实现.pdf

    数字化校园中基于Java数据交换的设计与实现 Java 数据交换系统是...Java 数据交换系统是一种基于 Java 的解决方案,能够实现学校内部管理人员、教师、学生之间的信息交换和数据传递,提高学校内部的信息化管理水平。

    基于J2EE的介绍

    Java Authentication and Authorization Service (JAAS)则为安全管理提供了接口,确保应用程序的安全性。 J2EE的设计目标还包括硬件无关性。Java的可移植运行时使得应用程序与硬件解耦,用户可以根据预算和业务需求...

    基于Java技术网络电话系统的设计与设想.pdf

    基于Java技术的软件开发、应用RMI、JDBC等技术实现一个小型网络电话系统,应用ACCESS数据库记录相关数据,使用JDBC实现Java程序与数据库的连接。通过对端口的设计,实现两台计算机之间的模拟通讯。 在本设计中,...

    ejb-rmi-test

    ejb-rmi-test是一个基于Java技术的测试项目,主要涉及企业级Java Bean(EJB)和远程方法调用(RMI)两大核心技术。EJB是Java平台企业版(Java EE)的核心组成部分,用于构建可部署在服务器端的分布式应用程序,而RMI...

    JBuilder开发人员指南

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

    基于J2EE技术下的图书管理系统

    在本篇文档中,我们可以了解到基于J2EE技术开发的图书管理系统及其核心技术。首先,文档提出了这一图书管理系统的开发背景和运行环境。系统运行在Windows2000操作系统上,并使用JDK1.4作为Java开发工具包。J2EE1.3.1...

    基于J2EE_EJB和SQL Server2000开发JSP WEB应用.pdf

    结合SQL Server 2000这样的关系数据库管理系统,JSP(Java Server Pages)技术可以用来开发动态交互式的WEB应用程序。 一、J2EE / EJB技术概述 J2EE是一种利用Java语言编写企业级应用程序的平台,它是基于Java 2...

    基于J2EE的BS方案数据应用开发

    综上所述,基于J2EE的BS方案数据应用开发涉及了多种技术,包括Web开发、数据库访问、组件化编程、事务管理等,它们共同构建了一个强大且灵活的企业级应用开发框架。通过熟练掌握这些技术,开发者可以构建出高效、...

Global site tag (gtag.js) - Google Analytics