📄 mainframe.java~5~
字号:
JFileChooser fileChooser = new JFileChooser(currentDirectory);
fileChooser.setFileFilter(new SourceFileFilter());
fileChooser.setDialogTitle("打开PL/O源程序文件");
fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
int option=fileChooser.showOpenDialog(this);
File file = fileChooser.getSelectedFile();
if (file == null) { //未选择文件
return;
}
if(option==JFileChooser.CANCEL_OPTION){//用户选择取消
return;
}
currentDirectory=(fileChooser.getCurrentDirectory()).toString();
currentFile=file;
addCurrentFile();
setMenuState(true);
}
//"保存"菜单事件响应
void jMenuFile_Save_actionPerformed(ActionEvent e) {
int index=jTabbedPane.getSelectedIndex();
String text=((JTextArea)editPane.get(index)).getText();
currentFile=(File)openFile.get(index);
try{
FileWriter writer=new FileWriter(currentFile);
writer.write(text);
writer.close();
}catch(IOException ioe){
System.out.println("编译器在保存当前文件时出错!");
}
}
//"另存为..."菜单事件响应
void jMenuFile_SaveAs_actionPerformed(ActionEvent e) {
int index=jTabbedPane.getSelectedIndex();
String text=((JTextArea)editPane.get(index)).getText();
currentFile=(File)openFile.get(index);
saveNewFile(false,"文件另存为");
}
//"关闭..."菜单事件响应
void jMenuFile_Close_actionPerformed(ActionEvent e) {
int index=jTabbedPane.getSelectedIndex();
boolean edit=((Boolean)edited.get(index)).booleanValue();
currentFile=(File)openFile.get(index);
if(edit){
JOptionPane checkPane = new JOptionPane("是否保存对文件" + currentFile.getName()
+ "的修改?",
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.YES_NO_CANCEL_OPTION);
JDialog checkDialog = checkPane.createDialog(this, "保存修改");
checkDialog.setVisible(true);
if (checkPane.getValue() == null) { //用户未选择,返回工作区
return;
}
Integer option = (Integer) checkPane.getValue();
int value = option.intValue();
if (value == JOptionPane.CANCEL_OPTION) { //用户选择"取消",返回工作区
return;
}
else if (value == JOptionPane.YES_OPTION) {
try {
FileWriter fWriter = new FileWriter(currentFile);
String text = ( (JTextArea) editPane.get(index)).getText();
fWriter.write(text);
fWriter.close();
}
catch (IOException ioe) {
System.out.println("编译器在保存当前文件时出错!");
}
}
}
//将文件及其组件从编译器列表中删除
openFile.remove(index);
edited.remove(index);
resultPane.remove((JTextArea)editPane.get(index));
editPane.remove(index);
workPane.remove(index);
jTabbedPane.removeTabAt(index);
if(openFile.isEmpty()){//打开文件列表为空,设置相应菜单的状态
setMenuState(false);
currentFile=null;
return;
}
currentFile=(File)openFile.get(jTabbedPane.getSelectedIndex());
}
//"词法分析"菜单事件响应
void jMenuRun_Lexical_actionPerformed(ActionEvent e) {
int index=jTabbedPane.getSelectedIndex();
JTextArea editArea=(JTextArea)editPane.get(index);
currentFile=(File)openFile.get(index);
try{
FileWriter fWriter=new FileWriter(currentFile);
fWriter.write(editArea.getText());
fWriter.close();
}catch(IOException ioe){
System.out.println("编译器在保存当前文件时出错!");
}
edited.set(index,new Boolean(false));
JTextArea resultArea=(JTextArea)resultPane.get(editArea);
if(resultArea==null){
resultArea=new JTextArea();
}
resultArea.setText("");
JPanel workArea=(JPanel)workPane.get(index);
workArea.removeAll();
workArea.setLayout(new GridLayout(2,1));
workArea.add(new JScrollPane(editArea));
workArea.add(new JScrollPane(resultArea));
Lexical lexical=new Lexical(currentFile,resultArea);
Graphics g=resultArea.getGraphics();
while(true){
try{
lexical.analyse();
}catch(LexicalException e1){
resultArea.append("===================================================\n"
+"编译器在第"+lexical.getLineNum()+"行发现第一个词法错误!\n");
break;
}catch(LexicalAnalysisFinishedException e2){
resultArea.append("===================================================\n"
+"词法分析结束\n");
break;
}
}
resultArea.setForeground(Color.BLACK);
}
//"关闭调试窗口"菜单事件响应
void jMenuRun_CloseResultPane_actionPerformed(ActionEvent e) {
int index=jTabbedPane.getSelectedIndex();
JPanel workArea=(JPanel)workPane.get(index);
JTextArea editArea=(JTextArea)editPane.get(index);
workArea.removeAll();
workArea.setLayout(new BorderLayout());
workArea.add(editArea,BorderLayout.CENTER);
}
//"关于..."菜单事件响应
void jMenuHelp_About_actionPerformed(ActionEvent e) {
AboutBox dlg = new AboutBox(this);
Dimension dlgSize = dlg.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, (frmSize.height - dlgSize.height) / 2 + loc.y);
dlg.setModal(true);
dlg.pack();
dlg.setResizable(false);
dlg.show();
}
//"退出"菜单事件响应
void jMenuFile_Exit_actionPerformed(ActionEvent e) {
System.exit(0);
}
}
class MainFrame_jMenuFile_New_actionAdapter implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jMenuFile_New_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuFile_New_actionPerformed(e);
}
}
class MainFrame_jMenuFile_Open_actionAdapter implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jMenuFile_Open_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuFile_Open_actionPerformed(e);
}
}
class MainFrame_jMenuFile_Save_actionAdapter implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jMenuFile_Save_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuFile_Save_actionPerformed(e);
}
}
class MainFrame_jMenuFile_SaveAs_actionAdapter implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jMenuFile_SaveAs_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuFile_SaveAs_actionPerformed(e);
}
}
class MainFrame_jMenuFile_Close_actionAdapter implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jMenuFile_Close_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuFile_Close_actionPerformed(e);
}
}
class MainFrame_jMenuRun_Lexical_actionAdapter implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jMenuRun_Lexical_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuRun_Lexical_actionPerformed(e);
}
}
class MainFrame_jMenuRun_CloseResultPane_actionAdapter implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jMenuRun_CloseResultPane_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuRun_CloseResultPane_actionPerformed(e);
}
}
class MainFrame_jMenuHelp_About_actionAdapter implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jMenuHelp_About_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuHelp_About_actionPerformed(e);
}
}
class MainFrame_jMenuFile_Exit_actionAdapter implements java.awt.event.ActionListener {
MainFrame adaptee;
MainFrame_jMenuFile_Exit_actionAdapter(MainFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jMenuFile_Exit_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -