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

📄 mainframe.java~100~

📁 java编的PL/0词法编译器
💻 JAVA~100~
📖 第 1 页 / 共 2 页
字号:
      System.out.println("编译器在打开当前文件时出错!");
    }
    panel.add(scroll,BorderLayout.CENTER);
    jTabbedPane.add(panel,currentFile.getName());
    jTabbedPane.setSelectedIndex(index);
    editPane.add(area);
    workPane.add(panel);
    edited.add(new Boolean(false));

    //为area添加键盘事件响应
    area.addKeyListener(new KeyListener(){
      public void keyPressed(KeyEvent e){}
      public void keyReleased(KeyEvent e){
        int i=jTabbedPane.getSelectedIndex();
        edited.set(i,new Boolean(true));
      }
      public void keyTyped(KeyEvent e){}
    });
  }

  //"新建..."菜单事件响应
  void jMenuFile_New_actionPerformed(ActionEvent e){
    saveNewFile(true,"新建PL/O源程序文件");
    //注意:不要再调用addCurrentFile()方法了,因为在saveNewFile中已经调用过了!
  }

  //"打开..."菜单事件响应
  void jMenuFile_Open_actionPerformed(ActionEvent e) {
    //新建JFileChooser
    JFileChooser fileChooser = new JFileChooser(currentDirectory);
    fileChooser.setFileFilter(new SourceFileFilter());
    fileChooser.setDialogTitle("打开PL/O源程序文件");
    fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
    int option=fileChooser.showSaveDialog(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);

    }
}

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);
  }
}

⌨️ 快捷键说明

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