Java初学者设计简单文本编译器

Java初学者设计简单文本编译器

创新互联客户idc服务中心,提供成都联通服务器托管、成都服务器、成都主机托管、成都双线服务器等业务的一站式服务。通过各地的服务中心,我们向成都用户提供优质廉价的产品以及开放、透明、稳定、高性价比的服务,资深网络工程师在机房提供7*24小时标准级技术保障。

本编译器可以实现一些基本功能

(1)所见即所得的文本输入;

(2)能方便地选中文本、复制、剪切、删除和粘贴文本;

(3)具有一般编辑器所具有的查找、替换和文件保存功能;

(4)打印功能;

(5)可以实现设置字体。

实现代码如下:

import java.io.*;

import javax.swing.*;

import java.awt.event.*;

import java.awt.print.PageFormat;

import java.awt.print.Printable;

import java.awt.print.PrinterException;

import java.awt.print.PrinterJob;

import java.awt.*;

import java.util.regex.*;

public class text3{

public static void main(String args[]){

EditWindow win=new EditWindow();

win.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

}

}

class EditWindow extends JFrame implements ActionListener{

JFileChooser filechooser = new JFileChooser(); //文件选择器

JMenuBar menubar;

JPopupMenu mouseMenu;

JMenu menu1,menu2,menu3,menu4;

JMenuItem itemNew,itemNewWindow,itemSave,itemSaveAs,itemPrinting,

itemPageSetup,itemCut,itemCopy,itemPaste,itemFind,itemReplace,itemOpen,

itemFontFormat,itemAbout,mouseCut,mouseCopy,mousePaste,mouseDelet,mouseAll;

JTextArea text1;

EditWindow(){

setTitle("简单文本编译器");

setSize(500,570);

setLocation(120,120);

setVisible(true);

/*

* 菜单栏设置:

* 1.文件

* ①新建

* ②新窗口

* ③打开

* ④保存

* ⑤另存为

* ⑥打印

* 2.编辑

* ①剪切

* ②复制

* ③粘贴

* ④查找

* ⑤替换

* 3.格式

* ①字体格式

*

* 4.帮助

* ①关于

*/

//文件菜单设置

menubar=new JMenuBar();

menu1=new JMenu("文件(F)");menu1.setMnemonic('F');

menu2=new JMenu("编辑(E)");menu2.setMnemonic('E');

menu3=new JMenu("格式(O)");menu3.setMnemonic('O');

menu4=new JMenu("帮助(H)");menu4.setMnemonic('H');

//文件

itemNew=new JMenuItem("新建(N) Ctrl+N");itemNewWindow=new JMenuItem("新窗口(W) Ctrl+W");

itemOpen=new JMenuItem("打开(O) Ctrl+O");itemSave=new JMenuItem("保存(S) Ctrl+S");

itemSaveAs=new JMenuItem("另存为(E) Ctrl+E");itemPrinting=new JMenuItem("打印(P) Ctrl+P");

itemNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));

itemNewWindow.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK));

itemOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));

itemSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));

itemSaveAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK));

itemPrinting.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK));

menu1.add(itemNew);menu1.add(itemNewWindow);menu1.add(itemOpen);menu1.add(itemSave);

menu1.add(itemSaveAs);menu1.add(itemPrinting);

//编辑

itemCut=new JMenuItem("剪切(T) Ctrl+X");itemCopy=new JMenuItem("复制(C) Ctrl+C");

itemPaste=new JMenuItem("粘贴(V) Ctrl+V");itemFind=new JMenuItem("查找(F) Ctrl+F");

itemReplace=new JMenuItem("替换(R) Ctrl+R");

itemCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));

itemCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));

itemPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));

itemFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));

itemReplace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_MASK));

menu2.add(itemCut);menu2.add(itemCopy);menu2.add(itemPaste);

menu2.add(itemFind);menu2.add(itemReplace);

//格式

itemFontFormat=new JMenuItem("字体格式(F)");

menu3.add(itemFontFormat);

//帮助

itemAbout=new JMenuItem("关于(H)");

menu4.add(itemAbout);

menubar.add(menu1);menubar.add(menu2);

menubar.add(menu3);menubar.add(menu4);

setJMenuBar(menubar);

validate();

//设置监听器

itemNew.addActionListener(this);itemNewWindow.addActionListener(this);itemSave.addActionListener(this);

itemSaveAs.addActionListener(this);itemPrinting.addActionListener(this);itemOpen.addActionListener(this);

itemCut.addActionListener(this);itemCopy.addActionListener(this);itemPaste.addActionListener(this);

itemFind.addActionListener(this);itemReplace.addActionListener(this);

itemFontFormat.addActionListener(this);itemAbout.addActionListener(this);

//鼠标右击菜设置

mouseMenu=new JPopupMenu();

mouseCut=new JMenuItem("剪切");mouseCopy=new JMenuItem("复制");mousePaste=new JMenuItem("粘贴");

mouseDelet=new JMenuItem("删除");mouseAll=new JMenuItem("全选");

mouseMenu.add(mouseCut);mouseMenu.add(mouseCopy);mouseMenu.add(mousePaste);

mouseMenu.add(mouseDelet);mouseMenu.add(mouseAll);

//添加文本域

text1=new JTextArea();

//设置鼠标监听器

text1.addMouseListener(new MouseAdapter(){

public void mousePressed(MouseEvent e) {

if(e.getModifiers()==InputEvent.BUTTON3_MASK)

mouseMenu.show(text1,e.getX(),e.getY());

}

});

mouseCut.addActionListener(this);mouseCopy.addActionListener(this);mousePaste.addActionListener(this);

mouseDelet.addActionListener(this);mouseAll.addActionListener(this);

//添加滚动条

JScrollPane scrollpane = new JScrollPane(text1);

scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

add(scrollpane, BorderLayout.CENTER);

//自动换行

text1.setLineWrap(true);

validate();

}

public void actionPerformed(ActionEvent e){

//

if(e.getSource()==itemNew) { //新建

text1.replaceRange("", 0, text1.getText().length());

}else if(e.getSource()==itemNewWindow) { //新窗口

EditWindow won=new EditWindow();

}else if(e.getSource()==itemOpen) { //打开

FileDialog openFile = new FileDialog(this, "打开文件", FileDialog.LOAD); //文件对话框

openFile.setVisible(true);

String filePath = openFile.getDirectory() + openFile.getFile();

try{

FileInputStream fis = new FileInputStream(filePath);

byte[] content = new byte[fis.available()];

fis.read(content);

text1.setText(new String(content));

text1.setCaretPosition(0);

if(openFile.getFile() != null){

this.setTitle(openFile.getFile());

}

fis.close();

}

catch(Exception ex){

ex.printStackTrace();

}

}else if(e.getSource() == itemSave) { //保存

int i = filechooser.showSaveDialog(EditWindow.this);

if (i == JFileChooser.APPROVE_OPTION) {

File f = filechooser.getSelectedFile();

try {

FileOutputStream out = new FileOutputStream(f);

out.write(text1.getText().getBytes());

}

catch (Exception ex) {

ex.printStackTrace();

}

}

}else if(e.getSource() ==itemSaveAs) { //另存为

int i = filechooser.showSaveDialog(EditWindow.this);

if (i == JFileChooser.APPROVE_OPTION) {

File f = filechooser.getSelectedFile();

try {

FileOutputStream out = new FileOutputStream(f);

out.write(text1.getText().getBytes());

}

catch (Exception ex) {

ex.printStackTrace();

}

}

}else if(e.getSource()==itemPrinting) { //打印

new win4();郑州妇科医院 http://www.zzkdfk120.com/

}else if(e.getSource()==itemCopy || e.getSource()==mouseCopy) { //复制

text1.copy();

}else if(e.getSource()==itemCut || e.getSource()==mouseCut) { //剪切

text1.cut();

}else if(e.getSource()==itemPaste || e.getSource()==mousePaste) { //粘贴

text1.paste();

}else if(e.getSource()==mouseDelet) { //删除

text1.cut();

}else if(e.getSource()==mouseAll) { //全选

text1.selectAll();

}else if(e.getSource()==itemFind) { //查找

new win1();

}else if(e.getSource()==itemReplace) { //替换

new win2();

}else if(e.getSource()==itemFontFormat) { //字体格式

new win3();

}else if(e.getSource()==itemAbout) { //关于

JOptionPane.showMessageDialog(EditWindow.this, "Java学习组制作");

}

}

class win1 extends JFrame{

JButton button1;

JTextField textfile;

JLabel titlelName1;

win1(){

//setLayout(new FlowLayout());

setLayout(null);

setTitle("查找");

setBounds(100,100,300,200);

setVisible(true);

setResizable(false);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

textfile=new JTextField(20);

button1=new JButton("查找");

titlelName1=new JLabel("查找内容:");

textfile.setBounds(100,30,120, 25);

titlelName1.setBounds(15,30,70, 30);

button1.setBounds(120, 100, 60, 25);

add(textfile);

add(button1);

add(titlelName1);

setVisible(true);

button1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

Pattern p;

Matcher m;

String ch2,ch3;

ch2=textfile.getText();

ch3=text1.getText();

p=Pattern.compile(ch2);

m=p.matcher(ch3);

while(m.find()) {

text1.select(m.start(), m.end());

}

}

});

validate();

}

}

class win2 extends JFrame{

JButton button1;

JTextField textfile1,textfile2;

JLabel titlelName1,titlelName2;

win2(){

setLayout(null);

setTitle("替换");

setBounds(100,100,300,200);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

titlelName1=new JLabel("查找内容:");

titlelName2=new JLabel("替换为:");

textfile1=new JTextField(20);

textfile2=new JTextField(20);

button1=new JButton("替换");

textfile1.setBounds(100,30,120,25);

textfile2.setBounds(100,60,120,25);

titlelName1.setBounds(15,30,70, 30);

titlelName2.setBounds(15,60,70, 30);

button1.setBounds(120, 100, 60, 25);

add(titlelName1);

add(titlelName2);

add(textfile1);

add(textfile2);

add(button1);

setVisible(true);

button1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

Pattern p;

Matcher m;

String ch2,ch3,ch4;

ch2=textfile1.getText();

ch3=textfile2.getText();

ch4=text1.getText();

if(ch2==null) {

JOptionPane.showMessageDialog(EditWindow.this, "请输入查找内容!");

}else {

p=Pattern.compile(ch2);

m=p.matcher(ch4);

while(m.find()) {

text1.replaceRange(ch3, m.start(), m.end());;

}

}

}

});

validate();

}

}

class win3 extends JFrame implements ItemListener{

JComboBox listFont;

win3(){

GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();

String fontName[]=ge.getAvailableFontFamilyNames();

listFont=new JComboBox(fontName);

JPanel pNorth=new JPanel(); //创建面板

pNorth.add(listFont); //添加列表

add(pNorth,BorderLayout.NORTH); //添加面板

listFont.addItemListener(this); //添加列表监视器

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setVisible(true);

setBounds(100,120,280,100);

}

public void itemStateChanged(ItemEvent e){

String name=(String)listFont.getSelectedItem();

Font f=new Font(name,Font.BOLD,32);

text1.setFont(f);

}

}

class win4 extends JFrame{

JButton button1,button2;

win4(){

setLayout(new FlowLayout());

setTitle("打印");

setBounds(100,100,300,100);

setVisible(true);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

button1=new JButton("打印");

button2=new JButton("打印预览");

add(button1);

add(button2);

button1.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

try {

PrinterJob job = PrinterJob.getPrinterJob(); //创建打印对象

if (!job.printDialog()) { //取消打印

return;

}

//设置打印页面

job.setPrintable(new Printable() {

@Override

public int print(Graphics graphics, PageFormat pageFormat,int pageIndex) throws PrinterException {

// TODO Auto-generated method stub

if(pageIndex > 0) { //判断当前打印页的索引(判断打印的是否正确)

return Printable.NO_SUCH_PAGE; //超出打印页码

}

return Printable.PAGE_EXISTS; //页面可以打印

}

});

job.print(); //实现打印

} catch (PrinterException e1) {

e1.printStackTrace();

}

}

});

button2.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(EditWindow.this, "该功能尚未开发!");

}

});

}

}

}


本文题目:Java初学者设计简单文本编译器
标题链接:http://ybzwz.com/article/gghdos.html