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

📄 mainframe.java~5~

📁 java编的PL/0词法编译器
💻 JAVA~5~
📖 第 1 页 / 共 2 页
字号:
    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 + -