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

📄 javaeditor.java

📁 用java编写的IDE程序示例
💻 JAVA
字号:
/*
 * Created on 2004-5-25
 */
package yuchifang.javaIDE.editors;

import java.awt.Dimension;
import java.awt.Font;
import java.io.File;

import javax.swing.JEditorPane;
import javax.swing.JOptionPane;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.filechooser.FileFilter;

import yuchifang.javaIDE.JavaIDE;
import yuchifang.javaIDE.compilers.JavaCompiler;
import yuchifang.javaIDE.executors.JavaExecutor;
import yuchifang.javaIDE.interfaces.IExecCaller;
import yuchifang.javaIDE.util.ExtensionFileFilter;
import yuchifang.javaIDE.util.IDEUtil;
import yuchifang.javaIDE.util.JavaFile;

/**
 * @author yuchifang
 */
public class JavaEditor extends JEditorPane
{
  private boolean modified = false;
  private JavaFile javaFile;
  
  private long lastSaveTime = 0;
  private long lastCompileTime = lastSaveTime - 1;

  private JavaIDE parent;

  /**
	 * 简单的构造器,java文件没有指定
	 */
	public JavaEditor(JavaIDE parent)
  {
    this.parent = parent;
  }

  /**
	 * @param javaFile 编辑器集成的那个java文件实例
	 */
	public JavaEditor(JavaIDE parent, JavaFile javaFile)
  {
    setFont(new Font("宋体", Font.PLAIN, 12));
    
    this.parent = parent;
    
    addCaretListener(
      new CaretListener()
      {
				public void caretUpdate(CaretEvent e)
				{
          caretMoved();
				}
      }
    );
    
    this.javaFile = javaFile;
    
    if (javaFile != null)
    {
      setText(javaFile.getContent());
      modified = false;
    }
  }
  
	/**
	 * 改变行背景 
	 */
	protected void caretMoved()
	{
    //##未完成
	}

	/**
	 * 保存文件
	 */
	public void saveFile()
  {
    if (modified)
      javaFile.setContent(getText());
    javaFile.save();
    lastSaveTime = System.currentTimeMillis();
    modified = false;
  }
  
  /**
	 * @param file 把文件另存为file
	 */
	public void saveFileAs(File file)
  {
    if (modified)
      javaFile.setContent(getText());
    javaFile.saveAs(file);
    lastSaveTime = System.currentTimeMillis();
    modified = false;
  }
  
  /**
	 * @return 返回文件名,包括了扩展名
	 */
	public String getFileName()
  {
    return javaFile.getFileName();
  }
  
  /**
	 * @return 返回文件的全部路径
	 */
	public String getFilePath()
  {
    return javaFile.getFilePath();
  }
  
  /**
   * @return 返回true表示修改过且未保存
   */
  public boolean isModified()
  {
    return modified;
  }

  /**
   * @return 返回true表示修改过且未保存
   */
  public void setModified()
  {
    modified = true;
  }
  
	/**
	 * @return true表示是第一次保存
	 */
	public boolean isFirstSave()
	{
		return javaFile.getFilePath() == null;
	}
  
  /**
	 * @return 返回文件过滤器,用来打开文件
	 */
	public FileFilter getFileFiler()
  {
    ExtensionFileFilter eff = new ExtensionFileFilter();
    eff.addExtension("java");
    eff.setDescription("java files");
    return eff;
  }

	/**
	 * @return 编辑器所编辑的文件的扩展名,包括'.',比如".java"
	 */
	public String fileExtension()
	{
		return ".java";
	}

	/**
	 * @param ec 调用者,提供输出窗口 
	 */
	public void compile(IExecCaller ec)
	{
    ec.clearResults();

    JavaCompiler javaCompiler = new JavaCompiler(parent.getJDKPath() + "bin\\javac.exe");
		javaCompiler.compile(getFilePath(), ec);

    lastCompileTime = System.currentTimeMillis();
	}

	/**
	 * @param ec 输出窗口
	 */
	public void execute(IExecCaller ec)
	{
    ensureCompiled(ec);
    
    JavaExecutor javaExecutor = new JavaExecutor(parent.getJDKPath() + "bin\\java.exe");
    ec.clearResults();
    
    javaExecutor.execute(getFilePath(), ec);
	}

	/**
	 * 确认文件在执行前已经编译,通过对比文件保存的时间以及文件编译的时间得知
   * @param ec 输出窗口
	 */
	private void ensureCompiled(IExecCaller ec)
	{
    if (lastCompileTime > lastSaveTime) return;
    //让用户确认编译
    int choice = JOptionPane.showConfirmDialog(this,
        "文件[" + getFileName() + "]\r\n在上一次改动后尚未编译\r\n需要重新编译吗", "确认编译",
        JOptionPane.YES_NO_OPTION);

    if (choice == JOptionPane.YES_OPTION)
    {
      compile(ec);
    }
	}

	/**
	 * 计算当前光标的XY值并返回为Dimension 
	 */
	public Dimension getXY()
	{
    return IDEUtil.getCaretRowCol(getText(), getCaretPosition());
	}
}

⌨️ 快捷键说明

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