参考: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