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