Java编写的文本编辑器(菜鸟作品)
//这是主窗体文件 Wordwin.java
import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.*; import java.io.*; import java.awt.event.*; public class Wordwin extends JFrame implements DocumentListener { /** * */ private static final long serialVersionUID = 1L; JMenuBar menubar=new JMenuBar(); JMenu file=new JMenu("文件"); JMenu edit=new JMenu("编辑"); JMenu geshi=new JMenu("格式"); JMenu look =new JMenu("查看"); JMenu help =new JMenu("帮助"); JTextArea wordArea=new JTextArea(); JScrollPane imgScrollPane = new JScrollPane(wordArea); String [] str1={"新建","打开","保存","另存为","页面设置","打印","退出"}; String [] str2={"剪切","复制","粘贴","查找","替换"}; String [] str3={"自动换行","字体"}; Font f1=new Font("隶书",Font.PLAIN,15); Search d1=new Search(); Font1 z1=new Font1(); Change c1=new Change(); int flag=0; String source=""; public static void main(String[] args) { JFrame wordwin=new Wordwin(); wordwin.setVisible(true); } public Wordwin(){ c1.set(wordArea); z1.set(wordArea); setTitle("文本编辑器"); Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize();//获取屏幕分辨率 setSize(screenSize.width/2,screenSize.height/2);//大小 setLocation(screenSize.width/4,screenSize.height/4);//位置 add(imgScrollPane,BorderLayout.CENTER); setJMenuBar(menubar); file.setFont(f1); edit.setFont(f1); geshi.setFont(f1); look.setFont(f1); help.setFont(f1); menubar.add(file); menubar.add(edit); menubar.add(geshi); menubar.add(look); menubar.add(help); wordArea.getDocument().addDocumentListener(this); for(int i=0;i<str1.length;i++){ JMenuItem item1= new JMenuItem(str1[i]); item1.addActionListener(new MyActionListener1()); item1.setFont(f1); file.add(item1); } for(int i=0;i<str2.length;i++){ JMenuItem item2= new JMenuItem(str2[i]); item2.addActionListener(new MyActionListener1()); item2.setFont(f1); edit.add(item2); } for(int i=0;i<str3.length;i++){ JMenuItem item3= new JMenuItem(str3[i]); item3.addActionListener(new MyActionListener1()); item3.setFont(f1); geshi.add(item3); } } public void changedUpdate(DocumentEvent e) { flag=1; } public void insertUpdate(DocumentEvent e) { flag=1; } public void removeUpdate(DocumentEvent e) { flag=1; } void open(){ FileDialog filedialog=new FileDialog(this,"打开",FileDialog.LOAD); filedialog.setVisible(true); String path=filedialog.getDirectory(); String name=filedialog.getFile(); if(path!=null && name!=null){ FileInputStream file = null; try { file = new FileInputStream(path+name); } catch (FileNotFoundException e) { } InputStreamReader put =new InputStreamReader(file); BufferedReader in=new BufferedReader(put); String temp=""; String now = null; try { now = (String)in.readLine(); } catch (IOException e) { e.printStackTrace(); } while(now!=null){ temp+=now+"\r\n"; try { now=(String)in.readLine(); } catch (IOException e) { e.printStackTrace(); } } wordArea.setText(temp); } } void save(){ FileDialog filedialog=new FileDialog(this,"保存",FileDialog.SAVE); filedialog.setVisible(true); if(filedialog.getDirectory()!=null && filedialog.getFile()!=null){ OutputStreamWriter out = null; try { out = new OutputStreamWriter(new FileOutputStream(filedialog.getDirectory()+filedialog.getFile())); } catch (FileNotFoundException e) { e.printStackTrace(); } try { out.write(wordArea.getText()); } catch (IOException e) { e.printStackTrace(); } flag=0; try { out.close(); source=wordArea.getText(); } catch (IOException e) { e.printStackTrace(); } } } void newfile(){ if(flag==0){ wordArea.setText(""); } if(flag==1){ int m= JOptionPane.showConfirmDialog(this,"是否保存该文件"); if(m==0){ save(); wordArea.setText(""); } if(m==1){ //System.exit(0); wordArea.setText(""); flag=0; } } } void exit(){ if(flag==0){ System.exit(0); } if(flag==1){ int m= JOptionPane.showConfirmDialog(this,"是否保存该文件"); if(m==0){ save(); } if(m==1){ System.exit(0); } } } class MyActionListener1 implements ActionListener{ public void actionPerformed(ActionEvent e) { if(e.getSource()instanceof JMenuItem){ if(e.getActionCommand()=="剪切"){ wordArea.cut(); } if(e.getActionCommand()=="复制"){ wordArea.copy(); } if(e.getActionCommand()=="粘贴"){ wordArea.paste(); } if(e.getActionCommand()=="查找"){ d1.setVisible(true); } if(e.getActionCommand()=="字体"){ z1.setVisible(true); } if(e.getActionCommand()=="替换"){ c1.setVisible(true); } if(e.getActionCommand()=="打开"){ open(); } if(e.getActionCommand()=="保存"){ save(); } if(e.getActionCommand()=="新建"){ newfile(); } if(e.getActionCommand()=="退出"){ exit(); } } } } }
//这是查找替换的实现Change.java
import javax.swing.*; import java.awt.*; import java.awt.event.*; class Change extends JDialog{ /** * */ private static final long serialVersionUID = 1L; JLabel l1=new JLabel("查找内容"); JLabel l2=new JLabel("替换为"); JTextField t1=new JTextField(10); JTextField t2=new JTextField(10); JButton b1=new JButton("替换"); JButton b2=new JButton("全部替换"); JButton b3=new JButton("取消"); JTextArea a1=new JTextArea(); Font f1=new Font("隶书",Font.PLAIN,15); //int m; void set(JTextArea n){ a1=n; } public Change(){ setTitle("替换"); setSize(500,300); setLocation(200,300); setLayout(new FlowLayout()); l1.setFont(f1); l2.setFont(f1); t1.setFont(f1); t2.setFont(f1); b1.setFont(f1); b2.setFont(f1); b3.setFont(f1); add(l1); add(t1); add(l2); add(t2); add(b1); add(b2); add(b3); b1.addActionListener(new MyActionListener3()); b2.addActionListener(new MyActionListener3()); b3.addActionListener(new MyActionListener3()); } class MyActionListener3 implements ActionListener{ public void actionPerformed(ActionEvent e2) { int m; String source=a1.getText(); String find=t1.getText(); String change=t2.getText(); if(e2.getActionCommand()=="取消"){ setVisible(false); t1.setText(""); t2.setText(""); } if(e2.getActionCommand()=="替换"){ m=source.indexOf(find,0); String s1=source.substring(0,m); String s2=source.substring(m+find.length()); source=s1+change+s2; if(m==-1){ JOptionPane.showMessageDialog(null,"对不起,没找到您要找的内容!"); }else{ a1.setText(source); } } if(e2.getActionCommand()=="全部替换"){ m=-change.length(); while(true){ m=source.indexOf(find,m+change.length()); if(m==-1) break; else{ String s1=source.substring(0,m); String s2=source.substring(m+find.length()); source=s1+change+s2; } } a1.setText(source); } } } }
//这是改变字体的Font1.java
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Font1 extends JDialog implements ItemListener{ /** * */ private static final long serialVersionUID = 1L; JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); JPanel panel3 = new JPanel(); JComboBox comboBox1 = new JComboBox(); JComboBox comboBox2 = new JComboBox(); JComboBox comboBox3 = new JComboBox(); JLabel lab1=new JLabel("字体:"); JLabel lab2=new JLabel("字形:"); JLabel lab3=new JLabel("字号:"); String name=new String("宋体"); Font f1=new Font("隶书",Font.PLAIN,15); int style=1; int size=12; String []array2=new String[]{"常 规","倾 斜","加 粗"}; String []array3=new String[]{"14","15","15","16","17","18"}; GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); String [] fontName=ge.getAvailableFontFamilyNames(); JButton b1=new JButton("确定"); JButton b2=new JButton("颜色"); JTextArea a1=new JTextArea(); void set(JTextArea n){ a1=n; } public Font1(){ setTitle("字体"); setSize(500,600); setLayout(new FlowLayout()); //panel1.setLocation(100, 200); lab1.setFont(f1); lab2.setFont(f1); comboBox1.setModel(new DefaultComboBoxModel(fontName)); comboBox1.setFont(f1); for(int i=1;i<fontName.length;i++){ //comboBox1.setSelectedIndex(i); comboBox1.setSelectedItem(fontName); //comboBox1.addItem(fontName); } comboBox2.setModel(new DefaultComboBoxModel(array2)); comboBox2.setFont(f1); for(int i=1;i<array2.length;i++){ //comboBox2.setSelectedIndex(i); comboBox2.setSelectedItem(array2); //comboBox2.addItem(array2); } comboBox3.setModel(new DefaultComboBoxModel(array3)); comboBox3.setFont(f1); for(int i=1;i<array3.length;i++){ //comboBox2.setSelectedIndex(i); comboBox2.setSelectedItem(array3); //comboBox3.addItem(array3); } panel1.add(lab1); panel1.add(comboBox1); panel2.add(lab2); panel2.add(comboBox2); panel3.add(lab3); panel3.add(comboBox3); panel3.add(b1); panel3.add(b2); b2.addActionListener(new MyActionListener3()); comboBox1.addItemListener(this); comboBox2.addItemListener(this); comboBox3.addItemListener(this); b1.addActionListener(new MyActionListener3()); add(panel1); add(panel2); add(panel3); } public void itemStateChanged(ItemEvent e) { if(e.getSource()==comboBox1){ name=comboBox1.getSelectedItem().toString(); } if(e.getSource()==comboBox2){ String s1=comboBox2.getSelectedItem().toString(); if(s1.equals("加粗")){ style=Font.BOLD; } if(s1.equals("倾斜")){ style=Font.ITALIC; } if(s1.equals("常规")){ style=Font.PLAIN; } } if(e.getSource()==comboBox3){ String s2=comboBox3.getSelectedItem().toString(); size=Integer.parseInt(s2); } } class MyActionListener3 implements ActionListener{ public void actionPerformed(ActionEvent e2) { Font f=new Font(name,style,size); a1.setFont(f); if(e2.getActionCommand()=="颜色"){ setcolor(); } } } void setcolor(){ Color fontcolor=JColorChooser.showDialog(this,"字体颜色选择",a1.getForeground()); a1.setForeground(fontcolor); } }
//这是查找窗口,对不起,查找功能没实现Search.java
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Search extends JDialog{ /** * */ private static final long serialVersionUID = 1L; JLabel l1=new JLabel("查找内容"); JTextField t1=new JTextField(10); JButton b1=new JButton("查找下一个"); JButton b2=new JButton("取消"); Font f1=new Font("隶书",Font.PLAIN,15); public Search(){ setTitle("查找"); setSize(300,200); setLayout(new FlowLayout()); b1.setFont(f1); b2.setFont(f1); l1.setFont(f1); add(l1); add(t1); add(b1); add(b2); b2.addActionListener(new MyActionListener2()); } class MyActionListener2 implements ActionListener{ public void actionPerformed(ActionEvent e1) { setVisible(false); } } }
运行截图: