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

📄 simparameter.java

📁 一个小型网络仿真器的实现
💻 JAVA
字号:
/*
   JaNetSim  ---  Java Network Simulator
   -------------------------------------

   This software was developed at the Network Research Lab, Faculty of
   Computer Science and Information Technology (FCSIT), University of Malaya.
   This software may be used and distributed freely. FCSIT assumes no responsibility
   whatsoever for its use by other parties, and makes no guarantees, expressed or
   implied, about its quality, reliability, or any other characteristic.

   We would appreciate acknowledgement if the software is used.

   FCSIT ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
   DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING
   FROM THE USE OF THIS SOFTWARE.
*/

package janetsim;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class SimParameter implements java.io.Serializable {
  private String name;
  private SimComponent owner;
  private long lastUpdateTick;
  private boolean loggable;
  private boolean isLogging=false;
  private int logID=-1;

//meter handling
  protected SimMeter theMeter=null;
  private transient JDialog meterDialog=null;
  private transient JCheckBox meterInvoker=null;

  protected transient SimGUI theGUI=null;

//constructor: needs parameter name, owner (SimComponent),creation time,and whether loggable
  public SimParameter(String aName,SimComponent comp,long creationTick,boolean isLoggable) {
    name = aName;
    owner = comp;
    lastUpdateTick = creationTick;
    loggable=isLoggable;
  }

  public final String getName() {
    return name;
  }

  public final SimComponent getOwner() {
    return owner;
  }

  public final long getLastUpdateTick() {
    return lastUpdateTick;
  }

  public final void setLastUpdateTick(long tick) {
    update(tick);
  }

  public final boolean isLoggable() {
    return loggable;
  }

  public final int getLogID() {
    return logID;
  }

  public final boolean isLogging() {
    return isLogging;
  }

  public final boolean isMeterShowing() {
    return (meterDialog!=null);
  }

  public final boolean gotMeter() {
    return (theMeter!=null);
  }

  public final JDialog getMeterDialog() {
    return meterDialog;
  }

  public final void update(long tick) {
    lastUpdateTick = tick;
    if(theMeter!=null) doMeter(tick);
    if(isLogging) {
      SimLog.log(logID+" "+String.valueOf(tick)+" "+getString());
    }
  }

  public final ItemListener getLogListener() {
    if(loggable)
      return (new LogListener());
    return null;
  }

  public final ItemListener getMeterListener(JCheckBox invoker) {
    if(loggable) {
      meterInvoker=invoker;
      return (new MeterListener());
    }
    return null;
  }

  private class LogListener implements ItemListener {
    public void itemStateChanged(ItemEvent e) {
      if(e.getStateChange()==ItemEvent.SELECTED) {
        if(logID==-1) {
          logID=SimLog.getLogID(owner.getName(),name);
        }
        isLogging=true;
      }
      else isLogging=false;
    }
  }

  private class MeterListener implements ItemListener,ActionListener {
    private boolean forceHide=false;
    private void handleClose() {
      if(theMeter!=null) theMeter.destroyMeterPanel();
      if(meterDialog!=null) {
        meterDialog.dispose();
        theGUI.removeMeterDialog(meterDialog);
      }
      meterDialog=null;
      if(!forceHide) {
        theMeter=null;
        if(meterInvoker.isShowing())
          meterInvoker.setBackground(null);
      }
    }
    public void actionPerformed(ActionEvent e) {
      if(e.getActionCommand().equals("Hide")) {
        forceHide=true; //set the hide flag
        if(meterInvoker.isShowing()) meterInvoker.setSelected(false);
        else handleClose();
      }
    }
    public void itemStateChanged(ItemEvent e) {
      if(e.getStateChange()==ItemEvent.SELECTED) {
        forceHide=false; //clear the hide flag
        if(theMeter==null) {
          theMeter=new SimMeter();
        }
        meterInvoker.setBackground(null);
        if(meterDialog==null) {
          meterDialog=new JDialog(theGUI.getMainFrame(),owner.getName()+" - "+name);
          meterDialog.getContentPane().add(theMeter.getMeterPanel(this));
          meterDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
          meterDialog.addWindowListener(new WindowAdapter() {
              public void windowClosing(WindowEvent e) {
                if(meterInvoker.isShowing()) meterInvoker.setSelected(false);
                else handleClose();
              }
              public void windowClosed(WindowEvent e) {
                meterDialog=null;
                if(meterInvoker.isShowing()) meterInvoker.setSelected(false);
                else handleClose();
              }
            });
          meterDialog.pack();
          Point locscr=meterInvoker.getLocationOnScreen();
          meterDialog.setLocation(locscr.x+meterInvoker.getSize().width,locscr.y);
          meterDialog.show();
          theGUI.addMeterDialog(meterDialog);
        }
        else {
          meterDialog.requestFocus();
        }
      }
      else {
        if(gotMeter()) meterInvoker.setBackground(Color.white);
        handleClose();
      }
    }
  }

  public final JComponent getComponent(SimGUI aGUI) {
    theGUI=aGUI;
    return getJComponent();
  }

////////////// possible overrides //////////////////////////
  public boolean globalSetValue(String val) {
    return false;
  }
  protected void doMeter(long tick) {
  }
  public String getString() {
    return (new String("N/A"));
  }
  public JComponent getJComponent() {
    return (new JLabel(getString()));
  }
}

⌨️ 快捷键说明

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