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

📄 controlpanel.java

📁 p2p仿真
💻 JAVA
字号:
/*
 * @(#)ControlPanel.java	ver 1.2  6/20/2005
 *
 * Copyright 2005 Weishuai Yang (wyang@cs.binghamton.edu). 
 * All rights reserved.
 * 
 */
 
package gps.gui;

import gps.Simulator;
import gps.protocol.BT.BTPanel;
import gps.util.MyFileChooser;

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JToolBar;


/**
 * The panel at the right side of the simulator, it includes a setting 
 * panel for simulator, and a protocol panel. It provides graphical 
 * interface for controlling simulation progress, and setting parameters.
 *
 * @author  Weishuai Yang
 * @version 1.2,  6/20/2005
 */
public class ControlPanel extends JPanel implements ActionListener {

	private JButton mGraph, mMorph, mRun, mPause, mStop, mShowID, mSettings;

    private JToolBar mToolBar=null;
    private Box mMainPanel;
    /**
     * setting pannel
     */
    private SimulatorPanel mSimulatorPanel;
    /**
     * Protocol Panel
     */
    private ProtocolPanel mPanel;
    /**
     * reference back to controller
     */
    private SimGuiControl mControl=null;
    
	private MyFileChooser fileChooser = new MyFileChooser();
    
    private Dimension size = new Dimension( 320, 480 );
    
    /**
     * gets preferred size, inherated.
     * @return preferred size which is preset in code
     *
     */
    public Dimension getPreferredSize() { return size; }
    
    /**
     * gets minimum size, inherated.
     * @return minimum size which is preset in code
     *
     */
    public Dimension getMinimumSize() { return size; }
    
    
    /**
     * dummy constructor
     */
    public ControlPanel(){
    }
    
    /**
     * constructs ControlPanel with a back referenc to SimGuiControl
     * @param s SimGuiControl object
     */
    public ControlPanel(SimGuiControl s){
        setLayout(new BorderLayout());
        mControl=s;
        initComponent();
    }
    
    /**
     * gets SimGuiControl
     * @return SimGuiControl
     */
    public SimGuiControl getSimGuiControl(){
    	return mControl;
    }
    
    /**
     * initialize graphical components
     */
    public void initComponent(){
 		
		makeToolBar();
    	mMainPanel=Box.createVerticalBox();
    	
    	//mMainPanel.setLayout(new BoxLayout(mMainPanel, BoxLayout.PAGE_AXIS));
       
        mSimulatorPanel=new SimulatorPanel(this, Simulator.getInstance().getProperties());
        mSimulatorPanel.setPreferredSize(new Dimension(320,250));
        mSimulatorPanel.setMinimumSize(new Dimension(320,250));
 
		//here the initialization of mPanel depends on choices
    	switch(mSimulatorPanel.getProtocolIndex()){
			case 0:
				mPanel = new BTPanel(this);
				break;
			default:
				JOptionPane.showMessageDialog(mControl.getSimGui().getFrame(),"Not implemented yet!", "Error!", JOptionPane.ERROR_MESSAGE);		
				mPanel = new BTPanel(this);
		}
    	
        mPanel.setPreferredSize(new Dimension(320,450));
        
        mMainPanel.add(mSimulatorPanel);
        mMainPanel.add(mPanel);

        add(mMainPanel);
    
    }
    
    /**
     * load simulator properties from config file to text boxes
     */
    public void loadInit(){
    	mSimulatorPanel.retrieve();
    }

    /**
     * make toolbar, internal use
     */
    private void makeToolBar(){
    	mToolBar = new JToolBar();
        
        mRun = new JButton("Run");
        mRun.setMnemonic(KeyEvent.VK_R);
        mRun.setActionCommand("Run");
        
        mStop = new JButton("Stop");
        mStop.setMnemonic(KeyEvent.VK_T);
        mStop.setActionCommand("Stop");
        mStop.setEnabled(false);
        
        mPause = new JButton("Pause");
        mPause.setMnemonic(KeyEvent.VK_P);
        mPause.setActionCommand("Pause");
        mPause.setEnabled(false);
        
    	mGraph = new JButton("Graph");
        mGraph.setMnemonic(KeyEvent.VK_G);
        mGraph.setActionCommand("Graph");
    	
    	mMorph = new JButton("Morph");
        mMorph.setMnemonic(KeyEvent.VK_M);
        mMorph.setActionCommand("Morph");
        mMorph.setEnabled(false);
                
        mShowID = new JButton("ID");
        mShowID.setMnemonic(KeyEvent.VK_I);
        mShowID.setActionCommand("ID");
        mShowID.setEnabled(false);
        
//    	mSettings = new JButton("Settings");
//      //mSettings.setMnemonic(KeyEvent.VK_S);
//      //mSettings.setActionCommand("Settings");


        mRun.addActionListener(this);
        mPause.addActionListener(this);
        mStop.addActionListener(this);
        mGraph.addActionListener(this);
        mMorph.addActionListener(this);
        mShowID.addActionListener(this);
//      mSettings.addActionListener(this);

        mRun.setToolTipText("Click to run simulation.");
        mPause.setToolTipText("Click to pause simulation.");
        mStop.setToolTipText("Click to stop simulation.");
        mGraph.setToolTipText("Click to load graph file.");
        mMorph.setToolTipText("Click to make the graph look more clear.");
        mShowID.setToolTipText("Click to show node ID.");
//        //mSettings.setToolTipText("Click to set simulator options.");

        mToolBar.add(mRun);
        mToolBar.add(mPause);
        mToolBar.add(mStop);
        mToolBar.add(mGraph);
        mToolBar.add(mMorph);
        mToolBar.add(mShowID);
//        mToolBar.add(mSettings);
        
        add(mToolBar, BorderLayout.PAGE_START);
    	
    }
    
    /**
     * process click events from toolbar and menu.
     */
    public void actionPerformed(ActionEvent e) {
		if ("Run".equals(e.getActionCommand())) {
        	if(mControl.getGraphPanel().getGraph()==null){
        		JOptionPane.showMessageDialog(mControl.getSimGui().getFrame(),"Please load graph file before starting simulation.", "Information", JOptionPane.INFORMATION_MESSAGE);
	        	return;
	        }
            mRun.setEnabled(false);
            mPause.setEnabled(true);
            mStop.setEnabled(true);
        	mGraph.setEnabled(false);
            mMorph.setEnabled(false);
            //mSettings.setEnabled(false);
            
            mControl.getSimGui().setStatusBar("Simulation Running ... ");
            mPanel.reset();
            mPanel.start();
            
        } 
		else if ("Pause".equals(e.getActionCommand())) {
        	if("Pause".equals(mPause.getText())){
        		//pause
	            mRun.setEnabled(false);
	            mPause.setText("Resume");
	            mPause.setToolTipText("Click to resume simulation.");
	            mStop.setEnabled(true);
	        	mGraph.setEnabled(false);
	            mMorph.setEnabled(true);
	            //mSettings.setEnabled(false);

	            mControl.getSimGui().setStatusBar("Simulation Paused. ");  
	            mPanel.pause(); 
	            mControl.getGraphPanel().repaint();
            }
            else{
            	//resume
	            mRun.setEnabled(false);
	            mPause.setText("Pause");
	            mPause.setToolTipText("Click to pause simulation.");;
	            mStop.setEnabled(true);
	            mGraph.setEnabled(false);
	            mMorph.setEnabled(false);
	            //mSettings.setEnabled(false);
	            
	            mControl.getSimGui().setStatusBar("Simulation Running ... ");
				mPanel.resume();
	            mControl.getGraphPanel().repaint();
            }  
        } 
        else if ("Stop".equals(e.getActionCommand())) {
            mRun.setEnabled(true);
            mPause.setEnabled(false);
            mStop.setEnabled(true);
        	mGraph.setEnabled(true);
            mMorph.setEnabled(true);
            //mSettings.setEnabled(true);
            mPanel.stop();
            mControl.getSimGui().setStatusBar("Simulation Terminated. "); 
            
            mControl.getGraphPanel().repaint();
        }
		
        else if ("Graph".equals(e.getActionCommand())) {
            mControl.openGraph();
        }
        else if ("Morph".equals(e.getActionCommand())) {
        	if(mControl.getGraphPanel().getGraph()==null){
        		JOptionPane.showMessageDialog(mControl.getSimGui().getFrame(),"Please load graph file before morphing.", "Information", JOptionPane.INFORMATION_MESSAGE);
	        	return;
	        }
	        
	        //before morphing, set all buttons to false, they'll be set back after morphing finish
        	//mRun.setEnabled(false);
        	//mPause.setEnabled(false);
            //mStop.setEnabled(false);
            //mGraph.setEnabled(false);
        	//mMorph.setEnabled(false);
        	
        	mControl.getSimGui().setStatusBar("Morphing ... ");
        	setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
		    new Morpher().start();
            
        }
        else if("ID".equals(e.getActionCommand())) {
        	boolean cur=mControl.getGraphPanel().getShowNodeId();
            mControl.getGraphPanel().setShowNodeId(!cur);
            mControl.getGraphPanel().repaint();
            if(cur){
            	mShowID.setToolTipText("Click to show node ID.");
            }
            else{
            	mShowID.setToolTipText("Click to hide node ID.");
            }
        }
        else if ("Settings".equals(e.getActionCommand())){
        }
        

        //following commands are from menu
        else if ("Load".equals(e.getActionCommand())) {
            mRun.setEnabled(false);
            mPause.setEnabled(false);
            mStop.setEnabled(false);
            mGraph.setEnabled(false);
            mMorph.setEnabled(false);
            mShowID.setEnabled(false);
			//mSettings.setEnabled(false);
			mPanel.actionPerformed(new ActionEvent(this,0,"Load"));
		}
        else if ("Save".equals(e.getActionCommand())) {
				mPanel.actionPerformed(new ActionEvent(this,0,"Save"));
        }
    }
    
    /**
     * Inner class inhereted from Thread to morhper graph
     */
     
    class Morpher extends Thread {
		boolean running = true;
		public void run() {
			int i=0; 
		    while ( running && i++<130) {
				mControl.getGraphPanel().relax();
				mControl.getGraphPanel().repaint();
	            try { Thread.sleep( 20 ); }
				catch ( Exception e ) { 
					mControl.getSimGui().setStatusBar("Morph finished. ");

					//mRun.setEnabled(true);
					//mPause.setEnabled(false);
					//mStop.setEnabled(false);
					//mMorph.setEnabled(true);
					//mGraph.setEnabled(true);
					//mSettings.setEnabled(true);
		    
		            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
		            return; 
	            } 
		    }
		    
		    mControl.getSimGui().setStatusBar("Morph finished. ");
			//mRun.setEnabled(true);
			//mPause.setEnabled(false);
			//mStop.setEnabled(false);
			//mMorph.setEnabled(true);
			//mGraph.setEnabled(true);
			//mSettings.setEnabled(true);

	
	        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
		}
		
		public void stopIt() { running = false; }
    }
    
    
    /**
     * set button status after load success
     */
    public void loadSuccess(){

        mRun.setEnabled(true);
        mPause.setEnabled(false);
        mStop.setEnabled(false);
    	mGraph.setEnabled(true);
        mMorph.setEnabled(true);
        mShowID.setEnabled(true);
        //mSettings.setEnabled(true);
        mPanel.loadSuccess();
    }

    /**
     * set button status after load fail
     */
    public void loadFailed(){

        mRun.setEnabled(false);
        mPause.setEnabled(false);
        mStop.setEnabled(false);
        mGraph.setEnabled(true);
        
        mShowID.setEnabled(false);
        //mSettings.setEnabled(true);
    }
    /**
     * set button status and progress bar text after simulation finished
     */
    public void finishedRun(){
    	
        mRun.setEnabled(true);
        mPause.setEnabled(false);
        mStop.setEnabled(false);
        mGraph.setEnabled(true);
        mMorph.setEnabled(true);
        //mSettings.setEnabled(true);
        mControl.getSimGui().resetProgress();
    }
    
    /**
     * update running progress
     * @param a current value
     * @param b maximun possible value
     */
    public void runProgress(int a, int b){
		mControl.getSimGui().setProgress(a,b);
	}
}

⌨️ 快捷键说明

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