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 + -
显示快捷键?