📄 javaeditor.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 + -