?? 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 + -