simgui.java

来自「一个小型网络仿真器的实现」· Java 代码 · 共 1,854 行 · 第 1/5 页

JAVA
1,854
字号
        popup.add(menuItem);
        menuItem.addActionListener(cmdListener);
      }
    }

    if(sel.size()>1) {
      popup.addSeparator();
      menuItem=new JMenuItem("Flip Horizontally");
      popup.add(menuItem);
      menuItem.addActionListener(cmdListener);
      menuItem=new JMenuItem("Flip Vertically");
      popup.add(menuItem);
      menuItem.addActionListener(cmdListener);
      menuItem=new JMenuItem("Disconnect");
      popup.add(menuItem);
      menuItem.addActionListener(cmdListener);
    }

    if(sel.size()>0) {
      int i;
      Class firstClass=sel.get(0).getClass();
      for(i=1;i<sel.size();i++) {
        if(!firstClass.equals(sel.get(i).getClass())) break;
      }
      if(i==sel.size()) { //all have the same component type
        //check for SimCommand
        SimCommand cmd=((SimComponent)sel.get(0)).querySimCommand(sel.size());
        if(cmd!=null) {
          java.util.List commands=cmd.getCommand(theSim,this);
          if(!commands.isEmpty()) {
            popup.addSeparator();
            int j;
            for(j=0;j<commands.size();j++)
              popup.add((Component)commands.get(j));
          }
        }
      }

      popup.addSeparator();
      menuItem=new JMenuItem("Global Set Value");
      popup.add(menuItem);
      menuItem.addActionListener(cmdListener);
      menuItem=new JMenuItem("Properties");
      popup.add(menuItem);
      menuItem.addActionListener(cmdListener);
    }

    Point clog=e.getComponent().getLocationOnScreen();
    Dimension pdim=popup.getPreferredSize();
    Dimension sdim=Toolkit.getDefaultToolkit().getScreenSize();
    int x,y;

    if(isZooming) {
      x=(int)(e.getX()*zoomFactor);
      y=(int)(e.getY()*zoomFactor);
    }
    else {
      x=e.getX();
      y=e.getY();
    }

    if(clog.x+x+pdim.width>sdim.width) x=sdim.width-pdim.width-clog.x;
    if(clog.y+y+pdim.height>sdim.height) y=sdim.height-pdim.height-clog.y;

    popup.show(e.getComponent(),x,y);
  }

////////////////////////////// end services ///////////////////////////////

  private void createMainMenu(CommandListener cmdListener) {
    JMenuBar menuBar;
    JMenu menu;
    JMenuItem menuItem;

    menuBar = new JMenuBar();
    mainFrame.setJMenuBar(menuBar);

    menu = new JMenu("File");
    menu.setMnemonic(KeyEvent.VK_F);
    menuBar.add(menu);

    menuItem=new JMenuItem("New",KeyEvent.VK_N);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menuItem=new JMenuItem("Open...",KeyEvent.VK_O);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menuItem=new JMenuItem("Save",KeyEvent.VK_S);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menuItem=new JMenuItem("Save As...",KeyEvent.VK_A);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menu.addSeparator();
    menuItem=new JMenuItem("Load Topology...",KeyEvent.VK_L);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menuItem=new JMenuItem("Save Topology...",KeyEvent.VK_T);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menu.addSeparator();
    menuItem=new JMenuItem("Reset Log File",KeyEvent.VK_R);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menu.addSeparator();
    menuItem=new JMenuItem("Exit",KeyEvent.VK_X);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);

    menu = new JMenu("Edit");
    menu.setMnemonic(KeyEvent.VK_E);
    menuBar.add(menu);

    menuItem=new JMenuItem("Select All",KeyEvent.VK_S);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menuItem=new JMenuItem("Select By Class",KeyEvent.VK_L);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menuItem=new JMenuItem("Select By Type",KeyEvent.VK_T);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menuItem=new JMenuItem("Select By Name Prefix",KeyEvent.VK_N);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menu.addSeparator();
    clearCopyBuffer=new JMenuItem("Clear Copy Buffer",KeyEvent.VK_C);
    clearCopyBuffer.setEnabled(false);
    clearCopyBuffer.addActionListener(cmdListener);
    menu.add(clearCopyBuffer);
    menu.addSeparator();
    fastScrollCB=new JCheckBoxMenuItem("Fast Scroll (JDK1.3 bug?)",false);
    fastScrollCB.addItemListener(cmdListener);
    menu.add(fastScrollCB);
    linktagCB=new JCheckBoxMenuItem("Links follow others",true);
    linktagCB.addItemListener(cmdListener);
    menu.add(linktagCB);
    apptagCB=new JCheckBoxMenuItem("Applications follow others",true);
    apptagCB.addItemListener(cmdListener);
    menu.add(apptagCB);
    menu.addSeparator();
    menuItem=new JMenuItem("GUI Priority...",KeyEvent.VK_G);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);

    menu = new JMenu("View");
    menu.setMnemonic(KeyEvent.VK_V);
    menuBar.add(menu);

    menuItem=new JMenuItem("Reset Zoom",KeyEvent.VK_R);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menu.addSeparator();
    menuItem=new JMenuItem("Zoom In",KeyEvent.VK_I);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menuItem=new JMenuItem("Zoom Out",KeyEvent.VK_O);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menu.addSeparator();
    menuItem=new JMenuItem("Zoom Tool",KeyEvent.VK_Z);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);

    menuBar.add(createToolMenu());

    menu = new JMenu("Window");
    menu.setMnemonic(KeyEvent.VK_W);
    menuBar.add(menu);

    menuItem=new JMenuItem("Close All",KeyEvent.VK_C);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);

    menu = new JMenu("Help");
    menu.setMnemonic(KeyEvent.VK_H);
    menuBar.add(menu);

    menuItem=new JMenuItem("About...",KeyEvent.VK_A);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menuItem=new JMenuItem("Memory Status...",KeyEvent.VK_M);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
    menu.addSeparator();
    menuItem=new JMenuItem("Quick Help...",KeyEvent.VK_Q);
    menuItem.addActionListener(cmdListener);
    menu.add(menuItem);
  }

  private SimCommand generateCommand(String className) {
    try {
      Class compDef = Class.forName(className);
      Class[] args = new Class[0];
      java.lang.reflect.Constructor constr = compDef.getDeclaredConstructor(args);
      Object[] argvals = new Object[0];
      SimCommand newComp=(SimCommand)constr.newInstance(argvals);
      return newComp;
    } catch(Exception e) {
      return null;
    }
  }

  private JMenu createToolMenu() {
    JMenu menu=new JMenu("Tools");
    menu.setMnemonic(KeyEvent.VK_T);
    boolean found=false;
    boolean added=false;

  //parse the config file
    try {
      BufferedReader infile=new BufferedReader(new FileReader(Sim.SIM_CONFIG_FILE));
      for(;;) {
        String aLine=infile.readLine();
        if(aLine==null) break; //end of file

        aLine=aLine.trim();
        if(aLine.startsWith("[command]")) {
          found=true;
          continue;
        }
        if(!found) continue;

        if(aLine.equals("")) continue; //skip blank line
        if(aLine.startsWith("#")) continue; //skip comment
        if(aLine.startsWith("[")) {
          found=false;
          continue;
        }

        SimCommand cmd=generateCommand(Sim.SIM_COMP_PACKAGE+"."+aLine);
        if(cmd!=null) {
          java.util.List commands=cmd.getCommand(theSim,this);
          if(!commands.isEmpty()) {
            int j;
            for(j=0;j<commands.size();j++)
              menu.add((Component)commands.get(j));
            added=true;
          }
        }
      }
      infile.close();
    }
    catch (IOException ex) {
      JOptionPane.showMessageDialog(null,
        "Error opening/reading/processing simulation config file "+
        Sim.SIM_CONFIG_FILE+" !","Error",JOptionPane.ERROR_MESSAGE);
      System.exit(1);
    }

    if(!added) menu.setEnabled(false);

    return menu;
  }

  private void createCompMenu(NewCompListener compListener) {
    compMenu=new JMenu("New Component");
    JMenu menu=null;
    JMenuItem menuItem=null;
    String className=null;
    boolean found=false;

  //parse the config file
    try {
      BufferedReader infile=new BufferedReader(new FileReader(Sim.SIM_CONFIG_FILE));
      for(;;) {
        String aLine=infile.readLine();
        if(aLine==null) break; //end of file

        aLine=aLine.trim();
        if(aLine.startsWith("[component]")) {
          found=true;
          continue;
        }
        if(!found) continue;

        if(aLine.equals("")) continue; //skip blank line
        if(aLine.startsWith("#")) continue; //skip comment
        if(aLine.startsWith("[")) {
          found=false;
          continue;
        }

        if(aLine.startsWith(">")) { //component type
          if(menu==null) { //oh oh, no class yet...
            throw new IOException();
          }
          //search for comma
          int index=aLine.indexOf(',');
          if(index==-1) {
            String objectName=aLine.substring(1).trim();
            menuItem=new JMenuItem(objectName);
            menuItem.setActionCommand(className+"."+objectName);
            menuItem.addActionListener(compListener);
            menu.add(menuItem);
          }
          else {
            menuItem=new JMenuItem(aLine.substring(index+1).trim());
            menuItem.setActionCommand(className+"."+aLine.substring(1,index).trim());
            menuItem.addActionListener(compListener);
            menu.add(menuItem);
          }
        }
        else { //a class name
          //search for comma
          int index=aLine.indexOf(',');
          if(index==-1) {
            className=aLine;
            menu=new JMenu(className);
            compMenu.add(menu);
          }
          else {
            className=aLine.substring(0,index).trim();
            menu=new JMenu(aLine.substring(index+1).trim());
            compMenu.add(menu);
          }
        }
      }
      infile.close();
    }
    catch (IOException ex) {
      JOptionPane.showMessageDialog(null,
        "Error opening/reading/processing simulation config file "+
        Sim.SIM_CONFIG_FILE+" !","Error",JOptionPane.ERROR_MESSAGE);
      System.exit(1);
    }
  }

  private void createPanels(CommandListener cmdListener) {
    JButton aButton;

    simArea=new SimPanel(theSim,this);

    JPanel comArea=new JPanel();
    comArea.setLayout(new BoxLayout(comArea,BoxLayout.X_AXIS));
    comArea.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
    comArea.add(Box.createHorizontalGlue());
    startButton=new JButton("Start");
    comArea.add(startButton);
    startButton.addActionListener(cmdListener);
    aButton=new JButton("Reset");
    comArea.add(aButton);
    aButton.addActionListener(cmdListener);
    comArea.add(Box.createRigidArea(new Dimension(10,0)));
    connectButton=new JButton("Connect Mode");
    comArea.add(connectButton);
    connectButton.addActionListener(cmdListener);
    aButton=new JButton("Fit All");
    comArea.add(aButton);
    aButton.addActionListener(cmdListener);
    comArea.add(Box.createRigidArea(new Dimension(10,0)));
    clockLabel=new JLabel(SimClock.getClockString(theSim.now()));
    clockLabel.setBorder(BorderFactory.createCompoundBorder(
                            BorderFactory.createEtchedBorder(),
                            BorderFactory.createEmptyBorder(0,5,0,5)));
    comArea.add(clockLabel);
    comArea.add(Box.createHorizontalGlue());

    JPanel newContentPane=new JPanel(new BorderLayout());
    mainScrollPane=new JScrollPane(simArea);
    mainViewport=mainScrollPane.getViewport();
    mainViewport.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
    newContentPane.add(mainScrollPane,BorderLayout.CENTER);
    newContentPane.add(comArea,BorderLayout.SOUTH);

    mainFrame.setContentPane(newContentPane);
  }
}

⌨️ 快捷键说明

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