📄 spa_pat_frame.java
字号:
package gui;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.Box;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import semantic.ParserException;
import semantic.RateException;
import trans.Peparoni;
public class SPA_PAT_Frame extends JFrame implements ActionListener{
private String pepafilename;
private PepaPanel pepamodel;
private PepaConsole pepaconsole;
private JTextField curfile;//当前文件
private JMenuBar bar=new JMenuBar();
private JMenu file=new JMenu("文件");
private JMenuItem newfile=new JMenuItem("新建");
private JMenuItem loadfile=new JMenuItem("打开");
private JMenuItem savefile=new JMenuItem("保存");
private JMenuItem exit=new JMenuItem("退出");
private JMenu run=new JMenu("运行");
private JMenuItem analyse=new JMenuItem("分析");
private JMenu solve=new JMenu("求解");
private JMenuItem LBEM=new JMenuItem("LBEM");
private JMenuItem LBEMSet=new JMenuItem("LBEM设置");
private JMenuItem SOR=new JMenuItem("SOR");
private JMenuItem SORSet=new JMenuItem("SOR设置");
private JMenu Advance=new JMenu("高级");
private JMenuItem Throughout=new JMenuItem("吞吐量分析");
private JMenuItem Step=new JMenuItem("单步查看");
private JFileChooser fileLoader;
private Peparoni driver=null;
private boolean issave=true;
public static void main(String[] argv)
{
SPA_PAT_Frame window=new SPA_PAT_Frame();
window.setTitle("SPA_PAT");
window.setSize(800,600);
window.setVisible(true);
}
public SPA_PAT_Frame()
{
pepamodel=new PepaPanel();
pepaconsole=new PepaConsole();
Container contentPane=this.getContentPane();
contentPane.add(pepamodel,BorderLayout.CENTER);
contentPane.add(pepaconsole,BorderLayout.SOUTH);
bar.add(file);
newfile.setActionCommand("newFile");
newfile.addActionListener(this);
file.add(newfile);
loadfile.setActionCommand("loadFile");
loadfile.addActionListener(this);
file.add(loadfile);
savefile.setActionCommand("saveFile");
savefile.addActionListener(this);
file.add(savefile);
exit.setActionCommand("exit");
exit.addActionListener(this);
file.add(exit);
bar.add(run);
analyse.setActionCommand("analyse");
analyse.addActionListener(this);
run.add(analyse);
bar.add(solve);
LBEM.setActionCommand("LBEM");
LBEM.addActionListener(this);
solve.add(LBEM);
LBEMSet.setActionCommand("LBEMSet");
LBEMSet.addActionListener(this);
solve.add(LBEMSet);
SOR.setActionCommand("SOR");
SOR.addActionListener(this);
solve.add(SOR);
SORSet.setActionCommand("SORSet");
SORSet.addActionListener(this);
solve.add(SORSet);
bar.add(Advance);
Step.setActionCommand("Step");
Step.addActionListener(this);
Advance.add(Step);
Throughout.setActionCommand("Throughout");
Throughout.addActionListener(this);
Advance.add(Throughout);
curfile=new JTextField();
bar.add(Box.createHorizontalStrut(30));
bar.add(new JLabel("当前文件: "));
curfile = new JTextField(20);
curfile.setFocusable(false);
curfile.setMaximumSize(new Dimension(150,curfile.getPreferredSize().height));
bar.add(curfile);
this.setJMenuBar(bar);
File modelDirectory = new File("./models");
fileLoader = new JFileChooser(modelDirectory.isDirectory()?modelDirectory:new File(System.getProperty("user.dir")));
fileLoader.setAcceptAllFileFilterUsed(true);
fileLoader.setFileFilter(new PepaFilter());
fileLoader.setDialogTitle("打开 .pepa .xmi .zargo .zuml 文件");
this.addWindowListener((WindowListener) new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
close();
}
});
}
private void close()
{
int result = JOptionPane.showConfirmDialog(this,"你确定要退出?","退出?",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if (result == JOptionPane.YES_OPTION)
System.exit(0);
}
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
String command = e.getActionCommand();
if(command.equals("newFile"))
{
pepamodel.NewContent();
curfile.setText("");
issave=false;
}else if(command.equals("loadFile"))
{
loadFile();
}else if(command.equals("saveFile"))
{
saveFile();
}else if(command.equals("exit"))
{
close();
}else if(command.equals("analyse"))
{
analyse();
}else if(command.equals("LBEM"))
{
Lsolve();
}else if(command.equals("LBEMSet"))
{
new LnbcgDialog((JFrame)this);
}else if(command.equals("SOR"))
{
Ssolve();
}else if(command.equals("SORSet"))
{
new SorDialog((JFrame)this);
}else if(command.equals("Step"))
{
new PepaWalk((JFrame) this, driver);
}else if(command.equals("Throughout"))
{
if(driver==null)
alertNoModel();
else{
new ThroughoutDialog(this);
}
}
}
private void loadFile()
{
int option=fileLoader.showOpenDialog(this);
if(option==JFileChooser.CANCEL_OPTION) return;
File targetFile = fileLoader.getSelectedFile();
try
{
pepafilename=targetFile.getCanonicalPath();
StringBuffer alpha = new StringBuffer();
BufferedReader bufferedReader;
bufferedReader = new BufferedReader(new FileReader(this.pepafilename));
for(int i =bufferedReader.read();i!=-1;i = bufferedReader.read())
{
alpha.append((char) i);
}
bufferedReader.close();
curfile.setText(targetFile.getName());
pepamodel.setContent(alpha.toString());
PepaConsole.addArgument("--打开文件:"+pepafilename+"\n");
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
issave=true;
pepamodel.setFocus(0);
}
private void saveFile()
{
if(!issave)
{
JFileChooser saver = new JFileChooser("./models")
{
public void approveSelection()
{
File f = this.getSelectedFile();
String filename = f.getName().endsWith(".pepa")?f.getName():f.getName().concat(".pepa");
f = new File(f.getParent(),filename);
if(f.exists() && (JOptionPane.showConfirmDialog(this,
"The file "+filename+
" already exists, would you like to overwrite it?",
"Overwrite?",
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE) != JOptionPane.OK_OPTION)){return ;}
else{this.setSelectedFile(f);}
super.approveSelection();
}
};
saver.setAcceptAllFileFilterUsed(false);
saver.setFileFilter(new PepaFilter());
if(saver.showSaveDialog(this) != JFileChooser.APPROVE_OPTION)
return;
File f = saver.getSelectedFile();
try {
pepafilename=f.getCanonicalPath();
BufferedWriter bw = new BufferedWriter(new FileWriter(pepafilename,false));
bw.write(pepamodel.getContent());
bw.flush();
bw.close();
PepaConsole.addArgument("--保存文件:"+pepafilename+"\n");
issave=true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void analyse()
{
setValidate(false);
String content=pepamodel.getContent();
if(content.length()==0)
alertNoModel();
else
{
driver=new Peparoni();
driver.pepaModel(content);
try {
driver.derive();
} catch (RateException e) {
// TODO Auto-generated catch block
PepaConsole.addArgument("--"+e.toString()+"\n");
}
setValidate(true);
pepamodel.setFocus(1);
}
}
private void Lsolve()
{
driver.solve();
pepamodel.setFocus(2);
}
private void Ssolve()
{
driver.SORsolve();
pepamodel.setFocus(2);
}
private void setValidate(boolean f)
{
LBEM.setEnabled(f);
SOR.setEnabled(f);
Step.setEnabled(f);
}
private void setModel(boolean f)
{
analyse.setEnabled(f);
setValidate(false);
}
private void alertNoModel()
{
String info="请导入模型!";
int result = JOptionPane.showConfirmDialog(this,info,"Question", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if(result==JOptionPane.YES_OPTION) loadFile();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -