📄 servercontrolgui.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 + -