⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servergui.java

📁 是个swing 写的好的通信程序,里面有数据库和原码,运行就可以了,希望好好的
💻 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 + -