📄 servergui.java
字号:
package smoker.server;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import smoker.tools.*;
public class ServerGUI extends JFrame implements ActionListener {
public static final long serialVersionUID = 0;
private SystemTray st;
private TrayIcon ti;
private final String onLineTip = "当前在线人数: ";
private int onLineUserCount = 0;
private JButton btnStartBar;
private JButton btnStopBar;
private JButton btnRefBar;
private JButton btnMaxWindowBar;
private JButton btnMinWindowBar;
private JButton btnUserBar;
private JButton btnExitBar;
private Container container;
private JMenuItem itemStart;
private JMenuItem itemStop;
private JMenuItem itemConfig;
private JMenuItem itemExit;
private JMenuItem itemCoerceOffLine;
private JMenuItem itemRef;
private JMenuItem itemLookUser;
private JMenuItem itemUser;
private JMenuItem itemDepartment;
private JMenuItem itemCompany;
private JMenuItem itemHelp;
private JMenuItem itemAbout;
private JLabel labUserCount;
private JTextArea taMsgContent;
private JTable table;
private JLabel labStatusbar;
private JSplitPane spTabArea;
private JSplitPane spLab;
private JMenuItem popItemCoerceOffLine;
private JMenuItem popItemRef;
private JMenuItem popLookUser;
private UserTableModel tabModel;
private Server server;
private IServerCenter iServerCenter;
public ServerGUI(IServerCenter iServerCenter) {
this.iServerCenter = iServerCenter;
server = new Server(iServerCenter);
this.setTitle("JICC 服务端");
this.setSize(600, 500);
this.setResizable(false);
this.setIconImage(Files.SERVER_ICON.getImage());
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
GUIManager.CenterWindow(this);
init();
}
private void init() {
container = this.getContentPane();
itemStart = GUIManager.createMenuItem("启动", this, "itemStart");
itemStop = GUIManager.createMenuItem("停止", this, "itemStop");
itemConfig = GUIManager.createMenuItem("配置", this, "itemConfig");
itemExit = GUIManager.createMenuItem("退出", this, "itemExit");
itemRef = GUIManager.createMenuItem("刷新", this, "itemRef");
itemCoerceOffLine = GUIManager.createMenuItem("强制离线", this, "itemCoerceOffLine");
itemLookUser = GUIManager.createMenuItem("查看资料", this, "itemLookUser");
popItemRef = GUIManager.createMenuItem("刷新", this, "popItemRef");
popItemCoerceOffLine = GUIManager.createMenuItem("强制离线", this, "popItemCoerceOffLine");
popLookUser = GUIManager.createMenuItem("查看资料", this, "popLookUser");
itemUser = GUIManager.createMenuItem("用户管理", this, "itemUser");
itemDepartment = GUIManager.createMenuItem("部门管理", this, "itemDepartment");
itemCompany = GUIManager.createMenuItem("公司管理", this, "itemCompany");
itemHelp = GUIManager.createMenuItem("帮助", this, "itemHelp");
itemAbout = GUIManager.createMenuItem("关于", this, "itemAbout");
btnStartBar = GUIManager.createJButton(null, Files.START_ICON, this, "btnStartBar");
btnStartBar.setToolTipText("启动服务");
btnStopBar = GUIManager.createJButton(null, Files.STOP_ICON, this, "btnStopBar");
btnStopBar.setToolTipText("停止服务");
btnRefBar = GUIManager.createJButton(null, Files.REFRESH_ICON, this, "btnRefBar");
btnRefBar.setToolTipText("刷新");
btnUserBar = GUIManager.createJButton(null, Files.USERMANAGER_ICON, this, "btnUserBar");
btnUserBar.setToolTipText("用户管理");
btnMaxWindowBar = GUIManager.createJButton(null, Files.MAXWINDOW_ICON, this, "btnMaxWindowBar");
btnMaxWindowBar.setToolTipText("最大化窗口");
btnMinWindowBar = GUIManager.createJButton(null, Files.MINWINDOW_ICON, this, "btnMinWindowBar");
btnMinWindowBar.setToolTipText("最小化窗口");
btnMinWindowBar.setEnabled(false);
btnExitBar = GUIManager.createJButton(null, Files.EXIT_ICON, this, "btnExitBar");
btnExitBar.setToolTipText("退出系统");
table = new JTable();
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabModel = new UserTableModel();
table.getTableHeader().setReorderingAllowed( false );
table.setModel(tabModel);
table.setComponentPopupMenu(getTablePopMenu());
labUserCount = new JLabel("当前在线人数: 0", JLabel.LEFT);
taMsgContent = new JTextArea(5, 10);
taMsgContent.setEditable(false);
labStatusbar = new JLabel(" 初始化数据完成!");
labStatusbar.setBorder(BorderFactory.createLineBorder(new Color(110,191, 244)));
setState(false);
setJMenuBar();
setJToolBar();
setJTable();
setStatusbar();
}
private void setJMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu menuSer = new JMenu("服务");
menuBar.add(menuSer);
menuSer.add(itemStart);
menuSer.add(itemStop);
menuSer.addSeparator();
menuSer.add(itemConfig);
menuSer.addSeparator();
menuSer.add(itemExit);
JMenu menuOperate = new JMenu("操作");
menuBar.add(menuOperate);
menuOperate.add(itemRef);
menuOperate.add(itemCoerceOffLine);
menuOperate.add(itemLookUser);
JMenu menuInfo = new JMenu("信息维护");
menuBar.add(menuInfo);
menuInfo.add(itemUser);
menuInfo.add(itemDepartment);
menuInfo.add(itemCompany);
JMenu menuHelp = new JMenu("帮助");
menuBar.add(menuHelp);
menuHelp.add(itemHelp);
menuHelp.addSeparator();
menuHelp.add(itemAbout);
this.setJMenuBar(menuBar);
}
private void setJToolBar() {
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
toolBar.setLayout(new GridLayout(1, 10));
container.setLayout(new BorderLayout());
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(toolBar, BorderLayout.WEST);
toolBar.add(btnStartBar);
toolBar.add(btnStopBar);
toolBar.add(btnRefBar);
toolBar.add(btnUserBar);
toolBar.add(btnMaxWindowBar);
toolBar.add(btnMinWindowBar);
toolBar.add(btnExitBar);
container.add(panel, BorderLayout.NORTH);
}
private void setJTable() {
spTabArea = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
spTabArea.setDividerSize(0);
spTabArea.setDividerLocation(268);
spLab = new JSplitPane(JSplitPane.VERTICAL_SPLIT, labUserCount,spTabArea);
spLab.setDividerSize(0);
spTabArea.add(new JScrollPane(table));
spTabArea.add(new JScrollPane(taMsgContent));
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(spLab);
container.add(panel);
}
private JPopupMenu getTablePopMenu() {
JPopupMenu tabPopMenu = new JPopupMenu();
tabPopMenu.add(popItemRef);
tabPopMenu.add(popItemCoerceOffLine);
tabPopMenu.add(popLookUser);
return tabPopMenu;
}
private void setStatusbar() {
container.add(labStatusbar, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("btnStartBar") || command.equals("itemStart")) {
server.startThread();
labStatusbar.setText(" 服务端已启动!");
setState(true);
} else if (command.equals("btnStopBar") || command.equals("itemStop")) {
server.stopThread();
stopServer("停止");
labStatusbar.setText(" 服务端已停止!");
setState(false);
} else if (command.equals("btnMaxWindowBar")) {
this.setLocation(0, 0);
this.setSize(GUIManager.MaxWindow());
spTabArea.setDividerLocation(500);
spTabArea.updateUI();
btnMaxWindowBar.setEnabled(false);
btnMinWindowBar.setEnabled(true);
} else if (command.equals("btnMinWindowBar")) {
this.setSize(600, 500);
GUIManager.CenterWindow(this);
spTabArea.setDividerLocation(268);
spTabArea.updateUI();
btnMaxWindowBar.setEnabled(true);
btnMinWindowBar.setEnabled(false);
} else if (command.equals("itemRef") || command.equals("popItemRef")) {
iServerCenter.refAllOnLineUser();
}else if(command.equals("itemLookUser") || command.equals("popLookUser")) {
if(!isSelected()) {
return;
}
int userId = Integer.parseInt((String)table.getValueAt(table.getSelectedRow(), 0));
User lookUser = iServerCenter.seeUserData(userId);
new CardView(lookUser);
}else if(command.equals("itemCoerceOffLine") || command.equals("popItemCoerceOffLine")) {
if(!isSelected()) {
return;
}
User offLineUser = new User();
offLineUser.setUserID(Integer.parseInt((String)table.getValueAt(table.getSelectedRow(), 0)));
iServerCenter.coerceOffLine(offLineUser);
}else if (command.equals("itemConfig")) {
new ServerConfigGUI(iServerCenter);
} else if (command.equals("itemUser") || command.equals("btnUserBar")) {
UserGUI userGui = new UserGUI(iServerCenter);
userGui.setVisible(true);
} else if (command.equals("itemDepartment")) {
DepartmentGUI dptGui = new DepartmentGUI(iServerCenter);
dptGui.setVisible(true);
} else if (command.equals("itemCompany")) {
CompanyGUI comGui = new CompanyGUI(iServerCenter);
comGui.setVisible(true);
} else if (command.equals("itemAbout")) {
AboutGUI aboutGui = new AboutGUI();
aboutGui.setVisible(true);
} else if (command.equals("btnExitBar") || command.equals("itemExit")) {
stopServer("退出");
System.exit(0);
}
}
private boolean isSelected() {
if(table.getSelectedRowCount() == 0) {
Msg.show("请选择一个用户!");
return false;
}
return true;
}
public void logLoginMsg(String msg) {
taMsgContent.append(msg + "\n");
}
public void addOnLineUser(String[] userInfo) {
tabModel.addRow(userInfo);
labUserCount.setText(onLineTip + (++onLineUserCount));
}
public void removeOffLineUser(int delUserId) {
int rowCount = tabModel.getRowCount();
String strID = String.valueOf(delUserId);
for (int i = 0; i < rowCount; i++) {
String value = (tabModel.getValueAt(i, 0)).toString();
if(value.equals(strID)) {
tabModel.removeRow(i);
labUserCount.setText(onLineTip + (--onLineUserCount));
return;
}
}
}
private void setState(boolean state) {
btnStartBar.setEnabled(!state);
btnStopBar.setEnabled(state);
btnRefBar.setEnabled(state);
itemStart.setEnabled(!state);
itemStop.setEnabled(state);
itemRef.setEnabled(state);
itemCoerceOffLine.setEnabled(state);
itemLookUser.setEnabled(state);
popItemRef.setEnabled(state);
popItemCoerceOffLine.setEnabled(state);
popLookUser.setEnabled(state);
}
private void displayClient() {
this.setVisible(true);
}
protected void processWindowEvent(WindowEvent evt) {
if (evt.getID() == WindowEvent.WINDOW_ICONIFIED) {
this.setVisible(false);
ExitToTray();
}
if (evt.getID() == WindowEvent.WINDOW_CLOSING) {
stopServer("退出");
System.exit(0);
}
}
////////////////////////////////////////////////////////
private void clearTable() {
for (int i = 0; i < tabModel.getRowCount(); i++) {
tabModel.removeRow(i);
}
}
private void stopServer(String tip) {
if(onLineUserCount > 0) {
int ret = Msg.showSel("当前还有 " + onLineUserCount +" 人在线!\n确定要" + tip + "服务器么?");
if(ret == JOptionPane.YES_OPTION) {
iServerCenter.closeAllClient();
iServerCenter.removeAllClient();
clearTable();
onLineUserCount = 0;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}else {
}
}
private void ExitToTray() {
try {
if (SystemTray.isSupported()) {// 判断当前平台是否支持系统托盘
st = SystemTray.getSystemTray();
Image icon = Toolkit.getDefaultToolkit().getImage("image/server.png");//定义托盘图标的图片
PopupMenu pm = new PopupMenu();
MenuItem displayClient = new MenuItem("显示服务器界面");
displayClient.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayClient();
st.remove(ti);
}
});
MenuItem exitMenu = new MenuItem("退出系统");
exitMenu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
stopServer("退出");
System.exit(0);
}
});
pm.add(displayClient);
pm.addSeparator();
pm.add(exitMenu);
if(ti == null) {
ti = new TrayIcon(icon, "JICC服务器", pm);
}
ti.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2) {
displayClient();
st.remove(ti);
}
}
});
st.add(ti);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -