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