?? userpane.java
字號:
/**
* @(#)server.frm.panes.UserPane.java 2008-8-29
* Copy Right Information : Tarena
* Project : JavaQQ
* JDK version used : jdk1.6.4
* Comments : 用戶管理面板類。
* Version : 1.0
* Sr Date Modified By Why & What is modified
* 1. 2008-8-29 小豬 新建
**/
package server.frm.panes;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableRowSorter;
import server.frm.Server;
import tools.DateDeal;
import dao.UserDAOByFile;
import data.User;
import data.UserSex;
import data.UserState;
/**
* 用戶管理面板類。
* 2008-8-29
* @author 達內(nèi)科技[Tarena Training Group]
* @version 1.0
* @since JDK1.6(建議)
*/
public class UserPane extends JPanel implements ActionListener,Runnable{
/** 查詢JQ用戶 */
private JLabel lblQuery = new JLabel("查詢JQ用戶");
/** 輸入的查詢的關(guān)鍵字 */
private JTextField txtQuery = new JTextField("");
/** 查詢的類型 */
private JComboBox boxQuery = new JComboBox();
/** 查詢 */
private JButton btnQuery = new JButton("查詢");
/** 添加新用戶 */
private JButton btnAddNew = new JButton("添加新用戶");
/** 刷新重新獲得所有用戶 */
private JButton btnFlash = new JButton("刷新");
/** 顯示用戶的表格 */
private JTable table = null;
/** 表格的模型 */
private DefaultTableModel model = null;
/** 狀態(tài)欄 */
private JLabel lblInfo = new JLabel("共有JQ用戶:0");
private JPopupMenu popupMenu = new JPopupMenu();
private JMenuItem itemChange = new JMenuItem("修改");
private JMenuItem itemDelete = new JMenuItem("刪除");
public UserPane() {
init();
btnAddNew.addActionListener(this);
btnFlash.addActionListener(this);
btnQuery.addActionListener(this);
}
/**
* 初始化面板。因為時間關(guān)系,可能寫的比較戳,望見諒。
*/
private void init(){
itemChange.addActionListener(this);
itemDelete.addActionListener(this);
popupMenu.add(itemChange);
popupMenu.addSeparator();
popupMenu.add(itemDelete);
txtQuery.setPreferredSize(new Dimension(100,25));
boxQuery.addItem(new QueryWay("按JQ號查詢",0));
boxQuery.addItem(new QueryWay("按昵稱查詢",1));
model = new MyDefaultTableModel();
model.addColumn("ID");
model.addColumn("JQ號");
model.addColumn("昵稱");
model.addColumn("姓名");
model.addColumn("性別");
model.addColumn("年齡");
model.addColumn("E-mail");
model.addColumn("狀態(tài)");
model.addColumn("注冊時間");
table = new JTable(model);
TableRowSorter sorter = new TableRowSorter(model);
table.setRowSorter(sorter);
table.addMouseListener(new TableMouseAdapter());
table.addMouseMotionListener(new TableMouseAdapter());
TableColumn tcID = table.getColumn(model.getColumnName(0));
tcID.setPreferredWidth(25);
tcID.setMaxWidth(25);
tcID.setMinWidth(25);
TableColumn tcJQ = table.getColumn(model.getColumnName(1));
tcJQ.setPreferredWidth(70);
tcJQ.setMaxWidth(80);
tcJQ.setMinWidth(60);
TableColumn tcNick = table.getColumn(model.getColumnName(2));
tcNick.setPreferredWidth(70);
tcNick.setMaxWidth(80);
tcNick.setMinWidth(60);
TableColumn tcName = table.getColumn(model.getColumnName(3));
tcName.setPreferredWidth(60);
tcName.setMaxWidth(65);
tcName.setMinWidth(55);
TableColumn tcSex = table.getColumn(model.getColumnName(4));
tcSex.setPreferredWidth(30);
tcSex.setMaxWidth(30);
tcSex.setMinWidth(30);
TableColumn tcAge = table.getColumn(model.getColumnName(5));
tcAge.setPreferredWidth(30);
tcAge.setMaxWidth(30);
tcAge.setMinWidth(30);
TableColumn tcState = table.getColumn(model.getColumnName(7));
tcState.setPreferredWidth(30);
tcState.setMaxWidth(30);
tcState.setMinWidth(30);
JPanel paneNorth = new JPanel();
paneNorth.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));
paneNorth.add(lblQuery);
paneNorth.add(txtQuery);
paneNorth.add(boxQuery);
paneNorth.add(btnQuery);
paneNorth.add(btnAddNew);
paneNorth.add(btnFlash);
JPanel paneSouth = new JPanel();
paneSouth.add(lblInfo);
setLayout(new BorderLayout());
add(paneNorth,BorderLayout.NORTH);
add(new JScrollPane(table),BorderLayout.CENTER);
add(new FillWidth(5,5),BorderLayout.WEST);
add(new FillWidth(5,5),BorderLayout.EAST);
add(paneSouth,BorderLayout.SOUTH);
}
/**
* 添加新用戶、刷新、查詢、修改、刪除等按鈕事件。
*/
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnAddNew){
JOptionPane.showMessageDialog(null, "此功能尚未制作!謝謝使用!請用客戶端注冊新用戶.");
}
if(e.getSource()==btnFlash){
flushUser();
}
if(e.getSource()==btnQuery){
QueryUser(txtQuery.getText(),((QueryWay)boxQuery.getSelectedItem()).getWay());
}
if(e.getSource()==itemChange)
JOptionPane.showMessageDialog(null, "功能制作中...");
if(e.getSource()==itemDelete){
int[] rows = table.getSelectedRows();
UserDAOByFile userDAO = new UserDAOByFile();
for(int i=0;i<rows.length;i++){
int jqnum = (Integer)table.getValueAt(rows[i], 1);
if(ServicePane.table==null || !ServicePane.table.containsKey(jqnum)){
//System.out.println("come:"+jqnum);
User user = userDAO.findById(jqnum);
if(user!=null){
int n = JOptionPane.showConfirmDialog(null, "確認刪除用戶["+user.getNickname()+"("+user.getJqnum()+")]","確認刪除?",JOptionPane.OK_CANCEL_OPTION);
if(n==JOptionPane.OK_OPTION)
userDAO.delete(user);
}
}
}
flushUser();
}
}
/**
* 查詢的方式。
* 2008-8-29
* @author 達內(nèi)科技[Tarena Training Group]
* @version 1.0
* @since JDK1.6(建議)
*/
private class QueryWay{
private String name;
private int way;
public QueryWay(String name,int way) {
this.name = name;
this.way = way;
}
public String toString() {
return this.name;
}
public int getWay() {
return way;
}
}
@Override
public void run() {
btnFlash.setEnabled(false);
//RowSorter sorter = table.getRowSorter();
if(Server.isFileWay){
table.setAutoCreateRowSorter(false);
model.setRowCount(0);
UserDAOByFile userDAO = new UserDAOByFile();
Vector<User> users = userDAO.findAll();
int totalNum = 0;
int onlineNum = 0;
int hiddenNum = 0;
int departureNum = 0;
int busyNum = 0;
int offlineNum = 0;
for(User user:users){
if(user!=null){
totalNum++;
if(user.getState()==UserState.ONLINESTATE.getState())
onlineNum++;
if(user.getState()==UserState.DEPARTURESTATE.getState())
departureNum++;
if(user.getState()==UserState.BUSYSTATE.getState())
busyNum++;
if(user.getState()==UserState.HIDDENSTATE.getState())
hiddenNum++;
if(user.getState()==UserState.OFFLIENSTATE.getState())
offlineNum++;
}
addUserToTable(user);
}
table.setAutoCreateRowSorter(true);
lblInfo.setText("共有JQ用戶:"+totalNum+"位.其中," +
"在線用戶:"+onlineNum+"位." +
"隱身用戶:"+hiddenNum+"位." +
"離開用戶:"+departureNum+"位." +
"繁忙用戶:"+busyNum+"位." +
"離線用戶:"+offlineNum+"位.");
}else
lblInfo.setText("注意:系統(tǒng)暫不支持數(shù)據(jù)庫方式!請使用文件方式保存數(shù)據(jù)!");
btnFlash.setEnabled(true);
}
/**
* 刷新當前所有用戶。
*/
public void flushUser(){
new Thread(this).start();
}
/**
* 按查詢方式、查詢類型查找用戶。
* @param query 查詢條件
* @param type 查詢方式,0:按JQ號碼查詢,1:按昵稱查詢
*/
private void QueryUser(String query,int type){
if(query.equals(""))
return;
//按jq號查詢
UserDAOByFile userDAO = new UserDAOByFile();
model.setRowCount(0);
if(type==0){
try {
int jqnum = Integer.parseInt(query);
User user = userDAO.findById(jqnum);
if(user!=null)
addUserToTable(user);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "請確保輸入的正確的JQ號碼!");
return;
}
return;
}
//按昵稱號查詢
if(type==1){
Vector<User> users= userDAO.findUserByName(query);
for(User user:users){
if(user!=null)
addUserToTable(user);
}
return;
}
}
/**
* 向table中添加用戶
* @param user User對象。
*/
private void addUserToTable(User user){
if(user!=null){
Vector<Object> v = new Vector<Object>();
v.add(user.getId());
v.add(user.getJqnum());
v.add(user.getNickname());
v.add(user.getRealname());
v.add(UserSex.getSex(user.getSex()));
v.add(user.getAge());
v.add(user.getEmail());
v.add(UserState.getStateName(user.getState()));
v.add(DateDeal.getDate(user.getRegisterTime()));
model.addRow(v);
}
}
/**
* 定制的DefaultTableModel。
* 2008-9-27
* @author 達內(nèi)科技[Tarena Training Group]
* @version 1.0
* @since JDK1.6(建議)
*/
private class MyDefaultTableModel extends DefaultTableModel{
public boolean isCellEditable(int row, int column) {
super.isCellEditable(row, column);
return false;
}
}
/**
* 鼠標移動至出發(fā)事件。
* 2008-9-27
* @author 達內(nèi)科技[Tarena Training Group]
* @version 1.0
* @since JDK1.6(建議)
*/
private class TableMouseAdapter extends MouseAdapter{
public void mouseEntered(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
if(e.getButton()==MouseEvent.BUTTON3){
popupMenu.show(table,e.getX(),e.getY());
}
}
public void mouseMoved(MouseEvent e) {
if(e.getSource()==table){
int row = table.rowAtPoint(e.getPoint());
table.changeSelection(row, 0, false, true);
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -