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

📄 servercontrolgui.java

📁 JAVA实现的聊天工具,可以容纳最多10个用户 1.本系统需要JDK1.5 或更高版本的支持。 2.serverDatabase为服务器端的数据文件. 若使用现有数据,可用帐号:1, 密码
💻 JAVA
字号:
//called from ServerThreadPoolBuilder
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.net.*;

public class ServerControlGUI extends WindowAdapter implements Runnable,ActionListener{
	private Administrator currentAdm;
	private static boolean isClientStarted,isAdmStarted;
	private boolean initiate; //indicate listen on port 4444 fail or not
	private final static String SAVE="save";
	//private final static String RELOGIN="relog-in";
	private final static String EXIT="exit";
	private final static String CLIENT="client";
	private final static String ADM="administrator";
	private final static String POOL="thread-pool";
	private final static String ABOUT="about";
	private JFrame frame;
	private static Thread clientGUI,administratorGUI;
	private static JTextField rField,oField;
	
	public ServerControlGUI(Administrator adm,boolean initiate){
		currentAdm=adm;
		isClientStarted=false;
		isClientStarted=false;
		this.initiate=initiate;
	}
	
	public void run(){
		frame.setDefaultLookAndFeelDecorated(true);
		frame=new JFrame("Administrate Panel");
		frame.addWindowListener(this);
		frame.setJMenuBar(makeMenuBar());
		frame.setContentPane(makeMainPanel());
		frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		//frame.setResizable(false);
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
	
	private Container makeMainPanel(){
		Container original=new JPanel();
		original.setLayout(new BoxLayout(original,BoxLayout.Y_AXIS));
		
		JPanel viewPane=new JPanel(new GridLayout(2,2));
		JLabel rLabel,oLabel,statusLabel,admIDLabel;					
		
		JPanel statusPane=new JPanel(new GridLayout(3,1));
		JLabel statusTitle=new JLabel("Server Status:");
		if(initiate){
			statusLabel=new JLabel("Server has been setup.");
			statusTitle.setForeground(Color.GREEN);
			statusLabel.setForeground(Color.GREEN);
		}
		else{
			statusLabel=new JLabel("Cannot listen on port 4444.Server has not been setup!");
			statusTitle.setForeground(Color.RED);
			statusLabel.setForeground(Color.RED);
		}
		if(currentAdm==null)
			admIDLabel=new JLabel();
		else
			admIDLabel=new JLabel("Current Administrator's ID:"+currentAdm.getID());
		admIDLabel.setHorizontalAlignment(SwingConstants.CENTER);
		statusTitle.setHorizontalAlignment(SwingConstants.CENTER);
		statusLabel.setHorizontalAlignment(SwingConstants.CENTER);
		statusPane.add(statusTitle);
		statusPane.add(statusLabel);
		statusPane.add(admIDLabel);
		
		
		rLabel=new JLabel("Registered Clients Number:");
		oLabel=new JLabel("Online Clients Number:");
		rField=new JTextField();
		rField.setEditable(false);
		oField=new JTextField();
		oField.setEditable(false);
		//set initial number
		rField.setText(String.valueOf(Server.getServerDatabase().getRegisteredClient()));
		oField.setText(String.valueOf(Server.getServerDatabase().getOnlineClient()));
		viewPane.add(rLabel);
		viewPane.add(rField);
		viewPane.add(oLabel);
		viewPane.add(oField);
		
		//original.add(makeToolBar());
		original.add(Box.createVerticalStrut(5));
		original.add(statusPane); //add status label
		original.add(Box.createVerticalStrut(10));
		original.add(Box.createVerticalGlue());
		original.add(viewPane);
		original.add(Box.createVerticalStrut(50));
		original.add(Box.createVerticalGlue());
		return original;
	}
	
	private JToolBar makeToolBar(){		
		JToolBar toolBar=new JToolBar("Tool Bar");
		
        toolBar.add(makeToolBarButton("client",CLIENT,"To manage client.","Client"));
        toolBar.add(makeToolBarButton("adm",ADM,"To manage administrator.","Adm"));
        toolBar.add(makeToolBarButton("pool",POOL,"To resize the Thread-Pool.","Pool"));
        toolBar.add(makeToolBarButton("save",SAVE,"To save database.","Save"));
        toolBar.add(makeToolBarButton("exit",EXIT,"To exit this system.","Exit"));
        toolBar.setFloatable(true);
        toolBar.setRollover(true);
        
        return toolBar;
	}
	private JButton makeToolBarButton(String imgName, String actionCommand,String tipText,String altText){
		String imgLocation;
 		URL imageURL=null;
 		JButton button;
 		
 		button=new JButton();
 		button.setActionCommand(actionCommand);
 		button.addActionListener(this);
 		button.setToolTipText(tipText);
		imgLocation="images/"+imgName+".gif";
        //try{
        	imageURL=ServerControlGUI.class.getResource(imgLocation);
        //}catch(MalformedURLException e){
        	
        //}
        if(imageURL!=null)
        	button.setIcon(new ImageIcon(imgLocation));
        else{
        	button.setText(altText);
        }
        return button;
	}
	
	private JMenuBar makeMenuBar(){
		JMenuBar menuBar;
		JMenu menu;
		JMenuItem menuItem;
		menuBar=new JMenuBar();
		//add menu File
		menu=new JMenu("File");
		menu.setMnemonic(KeyEvent.VK_F);
		
		menuItem=new JMenuItem("Save"); //menu item: Save
		menuItem.setToolTipText("To save Database.");
		menuItem.setMnemonic(KeyEvent.VK_S);
		menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.ALT_MASK));
		menuItem.setActionCommand(SAVE);
		menuItem.addActionListener(this);
		menu.add(menuItem);
		menu.addSeparator();
		/*menuItem=new JMenuItem("Relog-in"); //menu item:relog-in
		menuItem.setToolTipText("To relog-in this system.");
		menuItem.setActionCommand(RELOGIN);
		menuItem.addActionListener(this);
		menu.add(menuItem);
		menu.addSeparator();*/
		menuItem=new JMenuItem("Exit"); //menu item:Exit
		menuItem.setActionCommand(EXIT);
		menuItem.addActionListener(this);
		menu.add(menuItem);
		menu.addSeparator();
		menuItem=new JMenuItem("About this system");
		menuItem.setActionCommand(ABOUT);
		menuItem.addActionListener(this);
		menu.add(menuItem);
		
		menuBar.add(menu);
		//add menu Edit
		menu=new JMenu("Edit");
		menu.setMnemonic(KeyEvent.VK_E);
		
		menuItem=new JMenuItem("Client");  //menu item: Client
		menuItem.setToolTipText("To manage clients.");
		menuItem.setMnemonic(KeyEvent.VK_C);
		menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.ALT_MASK));
		menuItem.setActionCommand(CLIENT);
		menuItem.addActionListener(this);
		menu.add(menuItem);
		menu.addSeparator();
		menuItem=new JMenuItem("Administrator"); //menu item: administrator
		menuItem.setToolTipText("To manage administrators.");
		menuItem.setMnemonic(KeyEvent.VK_A);
		menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.ALT_MASK));
		menuItem.setActionCommand(ADM);
		menuItem.addActionListener(this);
		menu.add(menuItem);
		menu.addSeparator();
		menuItem=new JMenuItem("Thread-Pool");
		menuItem.setToolTipText("To resize the Thread-Pool.");
		menuItem.setMnemonic(KeyEvent.VK_T);
		menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,ActionEvent.ALT_MASK));
		menuItem.setActionCommand(POOL);
		menuItem.addActionListener(this);
		menu.add(menuItem);
		
		menuBar.add(menu);		
		return menuBar;
	}
	
	public void actionPerformed(ActionEvent ae){
		String type=ae.getActionCommand();
		if(type.equals(SAVE)){
			ServerIO.writeServerDatabase(Server.getServerDatabase());
			JOptionPane.showMessageDialog(frame,"Database has been saved.",
					"Information",JOptionPane.INFORMATION_MESSAGE);
		}
		else if(type.equals(EXIT)){ //before exit,save database
			exit();
			//shutdown sequence:this method->ServerThread.exit()->ServerThreadPoolBuilder->Server.exit()
		}
		else if(type.equals(CLIENT)){
			//System.out.println(isClientStarted);
			if(isClientStarted){ //if started,do nothing
				Toolkit.getDefaultToolkit().beep();
				return;
			}
			isClientStarted=true;
			clientGUI=new Thread(new ClientGUI());
			clientGUI.start();
			//System.out.println(isClientStarted);
		}
		else if(type.equals(ADM)){
			if(isAdmStarted){
				Toolkit.getDefaultToolkit().beep();
				return;		
			}
			isAdmStarted=true;
			administratorGUI=new Thread(new AdministratorGUI(currentAdm));
			administratorGUI.start();
		}
		else if(type.equals(ABOUT)){
			JOptionPane.showMessageDialog(frame,"   This system is designed for study and communicate.\n" +
					"You can modify it in whatever way you want , but no \n" +
					"commercial use is permitted.\n"+
					"   Author: 张文钊  from ZZULI\n" +
					"   E-Mail: zw_z7@hotmail.com",
					"About this system",JOptionPane.INFORMATION_MESSAGE);
		}
		else{ //thread-pool
			int size;
			String data=JOptionPane.showInputDialog("Input the size of Thread-Pool:",
					Server.getServerDatabase().getServerThreadNum());
			//System.out.println(data);
			if(data==null) //if cancled
				return;
			try{
				size=Integer.parseInt(data);
			}catch(NumberFormatException e){
				JOptionPane.showMessageDialog(frame,"Input format invalid!","Error",JOptionPane.ERROR_MESSAGE);
				return;
			}
			
			if(size<=0){
				JOptionPane.showMessageDialog(frame,"Thread-Pool size cannot be less than one!",
						"Error",JOptionPane.ERROR);
				return;
			}
			
			Server.getServerDatabase().setServerThreadNum(size);
			JOptionPane.showMessageDialog(frame,"Thread-Pool size has been changed. Effect will take "+
					"place when this systen is started next time.","Change Successful",
					JOptionPane.INFORMATION_MESSAGE);
		}
	} 
	
	public void windowClosing(WindowEvent we){ //before exit,save database
		exit();
	}
	
	synchronized static void resetNumber(){
		rField.setText(String.valueOf(Server.getServerDatabase().getRegisteredClient()));
		oField.setText(String.valueOf(Server.getServerDatabase().getOnlineClient()));		
	}
	
	synchronized static void clientGUIExit(){
		isClientStarted=false;
		clientGUI.stop();
	}
	synchronized static boolean isClientGUIStarted(){
		return isClientStarted==true;
	}
	synchronized static void admGUIExit(){
		isAdmStarted=false;
		administratorGUI.stop();
		//System.out.println(isClientStarted);
	}
	
	private void exit(){
		int choice=JOptionPane.showConfirmDialog(frame,
				"Do you really want to quit?",
				"Exit Confirm",
				JOptionPane.YES_NO_OPTION);
		if(choice==1)   //do not want to del
			return;
		frame.dispose();
		ServerIO.writeServerDatabase(Server.getServerDatabase());
		ServerThread.exit();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -