simparamlong.java
来自「一个小型网络仿真器的实现」· Java 代码 · 共 113 行
JAVA
113 行
/*
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.component;
import janetsim.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimParamLong extends SimParameter implements ActionListener,java.io.Serializable {
private long value;
private boolean isEditable;
private transient JComponent jcomp=null;
public SimParamLong(String aName,SimComponent comp,long creationTick,boolean isLoggable,
boolean editable,long val) {
super(aName,comp,creationTick,isLoggable);
value=val;
isEditable=editable;
}
////////////// possible overrides //////////////////////////
public long getValue() {
return value;
}
public void setValue(long val) {
value=val;
if(jcomp!=null) scheduleUpdate();
}
//helper for thread safe GUI update
private void scheduleUpdate() {
Runnable r=new Runnable() {
public void run() {
if(isEditable) ((JButton)jcomp).setText(String.valueOf(value));
else ((JLabel)jcomp).setText(String.valueOf(value));
}
};
SwingUtilities.invokeLater(r);
}
//helper setValue() with auto-update given current tick and a minimum
//interval between updates (interval must be >0 to have effect)
public void setValue(long val,long tick,long interval) {
setValue(val);
if(interval>0 && (tick-getLastUpdateTick() >= interval)) update(tick);
}
public boolean globalSetValue(String val) {
if(!isEditable) return false;
try {
long newval=Long.parseLong(val.trim());
setValue(newval);
return true;
} catch(NumberFormatException ex) {
return false;
}
}
protected void doMeter(long tick) {
theMeter.add(tick,value);
}
public String getString() {
return String.valueOf(value);
}
public JComponent getJComponent() {
if(jcomp==null) {
if(isEditable) {
jcomp=new JButton(String.valueOf(value));
((JButton)jcomp).setHorizontalAlignment(JButton.LEFT);
((JButton)jcomp).addActionListener(this);
}
else {
jcomp=new JLabel(String.valueOf(value));
((JLabel)jcomp).setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createLineBorder(Color.black),
BorderFactory.createEmptyBorder(0,5,0,5)));
}
}
return jcomp;
}
public void actionPerformed(ActionEvent e) {
String newVal=JOptionPane.showInputDialog(theGUI.getMainFrame(),
"New value:",getName(),JOptionPane.QUESTION_MESSAGE);
if(newVal==null) return;
if(!globalSetValue(newVal)) {
JOptionPane.showMessageDialog(theGUI.getMainFrame(),"Not a valid value!","Error",
JOptionPane.INFORMATION_MESSAGE);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?