用java做文本编译器

用java做一个文本编译器,并提供MyEclipse的编译和运行功能,既集代码编写、编译和运行于一体。
实现如下主要菜单:
文件(新建、打开文件、保存、另存为、退出)
工具(编译、运行)
帮助 (关于javaEdit)
功能要求:
1、编译和运行结果要能显示在图形界面内的组件中;
2、如果文件没有保存,关闭窗体需要提示保存;
3、如果文件没有命名,保存需要提示保存提示;
4、编译没有保存的Java文件,需要先保存,在编译;
2、编写代码获得编译和运行结果,不能直接利用Console窗口显示。
!!!!要求有注释!!!!

第1个回答  2014-03-21
给你个简单的记事本代码,自己看着修改吧!
package com.csk.notepad;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

import javax.swing.*;

public class MyNotepad implements ActionListener {
private JFrame frame = new JFrame("Notepad By ChenXiaoKang");
private JTextArea jta = new JTextArea();
private String result = "";
private boolean flag = true;
private File f;
private JButton jb = new JButton("开始");
private JTextField jtf = new JTextField(15);
private JTextField jt = new JTextField(15);
private JButton jbt = new JButton("替换为");
private JButton jba = new JButton("全部替换");
private Icon ic = new ImageIcon("D:\\java课堂笔记\\GUI\\11.gif");
private String value;
private int start = 0;
private JFrame jf = new JFrame("查找");
private JFrame jfc = new JFrame("替换");

@Override
public void actionPerformed(ActionEvent e) {
String comm = e.getActionCommand();
if ("新建".equals(comm)) {
if (!(frame.getTitle().equals("新记事本"))) {
if (!flag) {
write();
newNew();
} else {
JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");
int returnVal = jfc.showDialog(null, "保存为");
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
flag = false;
write();
}
}
} else if (!(jta.getText().isEmpty())) {
JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");
int returnVal = jfc.showDialog(null, "保存为");
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
flag = false;
write();
newNew();
}
} else {
newNew();
}
} else if ("打开".equals(comm)) {
JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");
jfc.setDialogType(JFileChooser.OPEN_DIALOG);
int returnVal = jfc.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
frame.setTitle(f.getName());
result = read();
flag = false;
value = result;
jta.setText(result);
}
} else if ("保存".equals(comm)) {
JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");
if (flag) {
int returnVal = jfc.showDialog(null, "保存为");
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
flag = false;
write();
}
} else {
write();
}
} else if ("另存".equals(comm)) {
JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");
int returnVal = jfc.showDialog(null, "另存");
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
write();
}
} else if ("退出".equals(comm)) {
System.exit(0);
} else if ("撤销".equals(comm)) {
jta.setText(value);
} else if ("剪切".equals(comm)) {
value = jta.getText();
jta.cut();
} else if ("复制".equals(comm)) {
jta.copy();
} else if ("粘贴".equals(comm)) {
value = jta.getText();
jta.paste();
} else if ("删除".equals(comm)) {
value = jta.getText();
jta.replaceSelection(null);
} else if ("全选".equals(comm)) {
jta.selectAll();
} else if ("查找".equals(comm)) {
value = jta.getText();
jf.add(jtf, BorderLayout.CENTER);
jf.add(jb, BorderLayout.SOUTH);

jf.setLocation(300, 300);
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
} else if ("替换".equals(comm)) {
value = jta.getText();
GridLayout gl = new GridLayout(3, 3);
JLabel jl1 = new JLabel("查找内容:");
JLabel jl2 = new JLabel("替换为:");
jfc.setLayout(gl);
jfc.add(jl1);
jfc.add(jtf);
jfc.add(jb);
jfc.add(jl2);
jfc.add(jt);
jfc.add(jbt);
JLabel jl3 = new JLabel();
JLabel jl4 = new JLabel();
jfc.add(jl3);
jfc.add(jl4);
jfc.add(jba);

jfc.setLocation(300, 300);
jfc.pack();
jfc.setVisible(true);
jfc.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
} else if ("版本".equals(comm)) {
JDialog jd = new JDialog(frame, "关于对话框");
jd.setSize(200, 200);
JLabel l = new JLabel("哈哈哈哈哈哈哈哈哈哈呵呵呵呵呵呵呵呵呵呵呵呵呵");
jd.add(l, BorderLayout.CENTER);
jd.setLocation(100, 200);
jd.setSize(300, 300);
jd.setVisible(true);
// jd.pack();
jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
} else if ("开始".equals(comm) || "下一个".equals(comm)) {
String temp = jtf.getText();
int s = value.indexOf(temp, start);
if (value.indexOf(temp, start) != -1) {
jta.setSelectionStart(s);
jta.setSelectionEnd(s + temp.length());
jta.setSelectedTextColor(Color.GREEN);
start = s + 1;
jb.setText("下一个");
// value=value.substring(s+temp.length());//不能截取字串
} else {
JOptionPane.showMessageDialog(jf, "查找完毕!", "提示", 0, ic);
jf.dispose();
}
} else if ("替换为".equals(comm)) {
String temp = jtf.getText();
int s = value.indexOf(temp, start);
if (value.indexOf(temp, start) != -1) {
jta.setSelectionStart(s);
jta.setSelectionEnd(s + temp.length());
jta.setSelectedTextColor(Color.GREEN);
start = s + 1;
jta.replaceSelection(jt.getText());
} else {
JOptionPane.showMessageDialog(jf, "查找完毕!", "提示", 0, ic);
jf.dispose();
}
} else if ("全部替换".equals(comm)) {
String temp = jta.getText();
temp = temp.replaceAll(jtf.getText(), jt.getText());
jta.setText(temp);

}
}

public String read() {
String temp = "";
try {
FileInputStream fis = new FileInputStream(f.getAbsolutePath());
byte[] b = new byte[1024];
while (true) {
int num = fis.read(b);
if (num == -1)
break;
temp = temp + new String(b, 0, num);
}
fis.close();
} catch (Exception e1) {
e1.printStackTrace();
}
return temp;
}

public void write() {
try {
FileOutputStream fos = new FileOutputStream(f);
fos.write(jta.getText().getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}

public void newNew() {
frame.dispose();
new MyNotepad();
flag = true;
}

public MyNotepad() {
JMenuBar jmb = new JMenuBar();
String[] menuLab = { "文件", "编辑", "帮助" };
String[][] menuItemLab = { { "新建", "打开", "保存", "另存", "退出" },
{ "撤销", "剪切", "复制", "粘贴", "删除", "全选", "查找", "替换" }, { "版本" } };
for (int i = 0; i < menuLab.length; i++) {
JMenu menu = new JMenu(menuLab[i]);
jmb.add(menu);
for (int j = 0; j < menuItemLab[i].length; j++) {
JMenuItem jmi = new JMenuItem(menuItemLab[i][j]);
menu.add(jmi);
jmi.addActionListener(this);
}
}
frame.setJMenuBar(jmb);
jta.setLineWrap(true);// 自动换行
JScrollPane jsp = new JScrollPane(jta);// 滚动窗口面板
frame.add(jsp);

jb.addActionListener(this);
jbt.addActionListener(this);
jba.addActionListener(this);

frame.setLocation(200, 50);
frame.setSize(620, 660);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
new MyNotepad();
}
}本回答被网友采纳
第2个回答  2014-03-21
搞EE的飘过,表示对于这个东西,我感觉做界面很难(因为我没认真学过SWING)....

java编译文本编辑器
import java.awt.event.*;import javax.swing.*;public class EditorJFrame extends JFrame implements ActionListener, ItemListener, MouseListener { private JTextField text_size; \/\/字号文本行 private JCheckBox checkbox_bold, checkbox_italic; \/\/粗体、斜体复选框 private JButton button_cut, button_copy, b...

java在线编译器简介
Java在线编译器是一种创新的编程工具,它不同于传统的编译环境。传统方式需要用户安装复杂的客户端和依赖库,而Java在线编译器则实现了革命性的变化。它将所有的编译工具、库和应用程序无缝集成到云端的Web服务器中,实现了云技术的运用,极大地简化了开发者的工作流程。对于初学者而言,Java在线编译器带来...

如何使用命令行编译以及运行java文件
1.进入F盘:输入【F:】,然后按下回车键【Enter】2.输入【cd java】,按下回车键【Enter】这样就已经进入了。这里的cd的意思就是进入的意思。紧接着调用java编译器进行编译。输入【javac HelloDate。java】,然后按下回车键【Enter】然后运行结果。输入【java HelloDate】,按下回车键【Enter】7 经...

java必须用文本编辑器编写源文件对吗?
1、编写源文件 使用一个文本编辑器(如Edit或记事本)编写源文件,不可使用非文本编辑器(如我word编辑器)。将编写好的源文件保存起来,源文件的扩展名必须是.java。2、编译源文件 使用Java编译器(javac.exe)编译源文件,得到字节码文件。3、运行程序 使用Java SE 平台中的Java解释器(java.exe)...

java编译器软件有哪些(java编译器推荐)
JAVA的编译器有哪些?推荐Jcreator,它对于初学者是个很好的开发工具,又小运行也很快。它要用到JDK,大的IDE有JBuilder,netbean,sunstdio,eclipse。编译器就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序。一个现代编译器的主要工作流程:源代码(sourcecode)→预处理器(...

能不能把java搞成编译型语言? 有没有人设计一种编译器直接把java源码编...
1. java已经是编译型语言,因为不编译源程序是没法直接运行的。只不过java是编译成中间的二进制代码,不是最终的机器代码。2.已经有这种编译器,免费的如gnu的gcj,收费的如Excelsior JET。不过没有太大必要使用,java在运行时也会把中间代码动态优化成本地机器代码,这种优化的结果一般会优于预先编译的...

java初学者用什么软件写代码比较好一点?
一、EditplusEditPlus是功能很全面的文本、HTML、程序源代码编辑器。 默认的支持HTML、ASP、Perl、C\/C++、CSS、PHP、Java、java和VB的语法着色。 通过定制语法文件还可以扩展到其他程序语言。 可以在Tools菜单的ConfigureUserTools菜单项配置用户工具,类似于UltraEdit的配置,配置好Java的编译器Javac和解释器Java后,通过Ed...

如何在记事本写java代码,并运行?
1、用浏览器打开用记事本编写的代码 新建“文本文档”后,鼠标右键点击该文本文档,在菜单栏的“打开方式”选择“用记事本打开”,也可以设置默认打开方式为“记事本”;用记事本打开文本文档后,直接在该文档内根据自己的需要输入想要编辑的网页代码。2、记事本写java代码怎么运行 首先,需要安装jdk并配置...

如何用java调用gcc编译器编译程序
方法1:Runtime.getRuntime().exec();\/\/ 执行本地命令,此方法是多态的方法2:使用ProcessBuilder。

java编译器用什么语言写的
Java编译器在Java虚拟机(JVM)的支持下运行,JVM能够将Java字节码转换成目标机器码,使得Java程序能够在不同的操作系统上运行。Java编译器的作用就是将Java源代码转换成字节码,而字节码是一种平台无关的中间代码,可以在运行时由JVM解释执行。编译器的开发是一个复杂的过程,涉及到词法分析、语法分析、...

相似回答