ava初学者设计简单文本编译器
本编译器可以实现一些基本功能
(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();}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 ch1,ch2; ch1=textfile.getText(); ch2=text1.getText(); p=Pattern.compile(ch1); m=p.matcher(ch2); 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 ch1,ch2,ch3; ch1=textfile1.getText(); ch2=textfile2.getText(); ch3=text1.getText(); if(ch1==null) { JOptionPane.showMessageDialog(EditWindow.this, "请输入查找内容!"); }else { p=Pattern.compile(ch1); m=p.matcher(ch3); while(m.find()) { text1.replaceRange(ch2, 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, "该功能尚未开发!"); } }); } }}
程序运行截图
![5b9c53c6e2952569459f039b131e3127.png](https://img-blog.csdnimg.cn/img_convert/5b9c53c6e2952569459f039b131e3127.png)
![f48dab4ebc7513af2a41469e1a344300.png](https://img-blog.csdnimg.cn/img_convert/f48dab4ebc7513af2a41469e1a344300.png)
![2d25fd0ceaaf88acf1ded546cd44ef6b.png](https://img-blog.csdnimg.cn/img_convert/2d25fd0ceaaf88acf1ded546cd44ef6b.png)
插入链接与图片
链接: link.
图片:
![821647c2dd741450dcba5e91b4bc1c28.png](https://img-blog.csdnimg.cn/img_convert/821647c2dd741450dcba5e91b4bc1c28.png)
![123e3833e3422d29f15f22e102df3ffd.png](https://img-blog.csdnimg.cn/img_convert/123e3833e3422d29f15f22e102df3ffd.png)
![5c2ec28963eea95d5cc8d1a6afc15477.png](https://img-blog.csdnimg.cn/img_convert/5c2ec28963eea95d5cc8d1a6afc15477.png)
![53704a2c3f17db3134171d6c083cb236.png](https://img-blog.csdnimg.cn/img_convert/53704a2c3f17db3134171d6c083cb236.png)
![9b316d8f965979b31b957b641a4cfbe6.png](https://img-blog.csdnimg.cn/img_convert/9b316d8f965979b31b957b641a4cfbe6.png)
![4d14b04f31e635b570dbdf4fe2b4a2a1.png](https://img-blog.csdnimg.cn/img_convert/4d14b04f31e635b570dbdf4fe2b4a2a1.png)
![0976ff8dc508fe35e73302979aa261ea.png](https://img-blog.csdnimg.cn/img_convert/0976ff8dc508fe35e73302979aa261ea.png)
![32bf91d99ea981f42d360dd2df419918.png](https://img-blog.csdnimg.cn/img_convert/32bf91d99ea981f42d360dd2df419918.png)
![3cc17a4a25f0a2ea43043ec622948cde.png](https://img-blog.csdnimg.cn/img_convert/3cc17a4a25f0a2ea43043ec622948cde.png)