主界面
- 菜单栏及文件功能实现
使用的Windowbuilder插件进行的布局,首先是菜单栏。
菜单栏,设置的有文件级联菜单项(包括新建、打开、保存、另存为等)。
新建的思路也就是更改窗口名字,然后清空文本框。
打开文件代码如下:
FileDialog fs=new FileDialog(shell,SWT.OPEN);
fs.setFilterExtensions(new String[] {".lua"});
String s=fs.open();
try {
File ss=new File(s);
styledText.setText("");//清空文本框
//System.out.println(ss.getParent());
file_path=ss.getPath();
parent_path=ss.getParent();
file_name=ss.getName();
BufferedReader br=new BufferedReader(new FileReader(ss));
String line = null; //变量字符串初始化为空
while((line = br.readLine()) != null){
shell.setText(file_name);
styledText.append(line + "\r\n"); //显示每行内容
new KeywordsHighlighting(shell,keywords,styledText);
}
br.close(); //关闭文本
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
保存文件代码:
if(file_path!=null)//保存的文件有目录时,直接保存不需要弹窗
{
try {
//System.out.println(file_path);
@SuppressWarnings("resource")
BufferedWriter br=new BufferedWriter(new FileWriter(file_path));
String values=styledText.getText();
br.write(values);
br.flush();
JOptionPane.showMessageDialog(null, "保存成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
else {
FileDialog fs=new FileDialog(shell,SWT.SAVE);
fs.setFilterPath(System.getProperty("C:\\Users\\ZYF\\Desktop"));//设置打开默认的路径
fs.setFilterExtensions(new String[] {"*.lua", "*.*"}); //设置所打开文件的扩展名;
fs.setFilterNames( new String[]{"Text Files (*.lua)", "All Files (*.*)"}); //设置显示到下拉框中的扩展
String s=fs.open();
//file_path=fs.getFilterPath();
try {
File ss=new File(s);
@SuppressWarnings("resource")
BufferedWriter br=new BufferedWriter(new FileWriter(ss));
String values=styledText.getText();
br.write(values);
br.flush();
JOptionPane.showMessageDialog(null, "保存成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
另存为和保存代码的唯一区别就是不用判断文件是否已保存。直接进行保存操作。
- 文本框及代码运行。
文本框使用的是StyledText文本框为了方便后续的代码高亮。
代码运行思路:
先把文本框里的代码保存成.lua后缀的文件,然后调用cmd,执行lua xxx.lua指令进行执行。再把获取到的运行结果返回到运行结果返回窗口。
如图:
代码如下:
st_1.setFont(SWTResourceManager.getFont("微软雅黑", 12, SWT.NORMAL));
st_1.setWordWrap(true);//自动换行
st_1.setText("");//每次运行先清空
st_1.setText("运行结果展示----------------"+"\r\n");//每次运行先清空
try {
Process exec = Runtime.getRuntime().exec("cmd /c cd "+UI.parent_path+"&&lua "+UI.file_name);
exec.waitFor();
final int exitValue = exec.waitFor();
if(exitValue==0) {
InputStream input = exec.getInputStream(); //获取cmd段的返回结果
//OutputStream output=exec.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String szline=null;
while((szline= reader.readLine()) != null) {
szline=st_1.getText()+szline+"\n";
st_1.setText(szline);
}
reader.close();
}
else {
InputStream errinput=exec.getErrorStream();//获取错误消息
BufferedReader errinreader = new BufferedReader(new InputStreamReader(errinput));
String szline=null;
st_1.setText("error-----> ");
while((szline= errinreader.readLine()) != null) {
szline=st_1.getText()+szline+"\n";
st_1.setText(szline);
}
errinreader.close();
}
exec.waitFor();
exec.destroy();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-gene rated catch block
e.printStackTrace();
}