java文本编辑器-课程设计

import java.awt.*;

import java.awt.event.*;
import java.awt.datatransfer.*;
import java.io.*;
import java.lang.*;
import javax.swing.*;
class  wenben extends JFrame{
	private final Color colorvalues[]= {Color.black,Color.blue,Color.red,Color.green};//定义颜色数组
	String styleNames[]= {"Bold","Italic"};//定义风格数组
	String fontNames[]= {"宋体","华文行楷","隶书"};//定义字体数组
	String[] sizeString=new String[30];//字号数组
	int[] size=new int[30];//与字号数组对应的字号整数,用于设置文字大小
	private JRadioButtonMenuItem colorItems[],fonts[];
	private JCheckBoxMenuItem styleItem[];
	private JTextArea displayText;//定义文本编辑区
	private ButtonGroup fontGroup,colorGroup;//字体组和字色组
	private int style;//字体风格
	private JScrollPane scroll;//为文本编辑区提供滚动条
	private String selectText="";//存放文本编辑区中选中的文本内容
	private JComboBox styleBox,fontBox,sizeBox;//工具栏
	private JPanel toolPanel;//存放工具栏
	private int rowNumber=0;
	private FileDialog fd=new FileDialog(this);
	//GUI
	public wenben () {
		super("记事本");
		//创建菜单条
		JMenuBar bar=new JMenuBar();
		setJMenuBar(bar);
		//设置文件菜单及其菜单项
		JMenu fileMenu=new JMenu("文件");
		fileMenu.setMnemonic('F');
		//设置新建菜单项
		JMenuItem newItem=new JMenuItem("新建");
		newItem.setMnemonic('N');
		fileMenu.add(newItem);
		newItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event)
			{
				displayText.setText("");
			}
		});
		//设置打开菜单项
		JMenuItem openItem=new JMenuItem("打开");
		openItem.setMnemonic('O');
		fileMenu.add(openItem);
		openItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				fd.setTitle("打开");//设置标题
				fd.show();
				if(fd.getFile()!=null) {
					File file=new File(fd.getFile());//用从fd中取得的文件建立新文件
					displayText.setText("");
					try {
						FileReader f=new FileReader(file);
						BufferedReader b=new BufferedReader(f);//按行读打开的文件,然后传入文本域
						String s;
						try {
							while((s=b.readLine())!=null) {
								
								displayText.append(s+"\n");
							}
							f.close();
							b.close();
						}
						catch(IOException ex) {}
					}catch(FileNotFoundException ex) {}
				}
				else {return;}
			}
		});
		fileMenu.addSeparator();//加分隔线
		//设置保存菜单项
		JMenuItem saveItem=new JMenuItem("保存");
		saveItem.setMnemonic('S');
		fileMenu.add(saveItem);
		saveItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				fd.setFile("*.txt");
				
				fd.setMode(FileDialog.SAVE);
				fd.setTitle("保存");
				fd.show();
				if(fd.getFile()!=null) {
					File file=new File(fd.getFile());
					try {
						PrintWriter pw=new PrintWriter(file);
						pw.print(displayText.getText());
						pw.flush();
						pw.close();
					}
					catch(FileNotFoundException ex) {
						ex.printStackTrace();
					}
				}
				else {return;}
			}
		});
		//设置另存为菜单项
		JMenuItem saveAsItem=new JMenuItem("另存为");
		saveAsItem.setMnemonic('Z');
		fileMenu.add(saveAsItem);
		saveAsItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				fd.setFile("*.java");
				fd.setMode(FileDialog.SAVE);
				fd.setTitle("另存为");
				fd.show();
				if(fd.getFile()!=null) {
					File file=new File(fd.getFile());
					try {
						PrintWriter pw=new PrintWriter(file);
						pw.print(displayText.getText());
						pw.flush();
						pw.close();
					}
					catch(FileNotFoundException ex) {
						ex.printStackTrace();
					}
				}
				else {return;}
			}
		});
		fileMenu.addSeparator();
		//设置退出菜单项
		JMenuItem exitItem=new JMenuItem("退出");
		exitItem.setMnemonic('X');
		fileMenu.add(exitItem);
		exitItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				System.exit(0);
			}
		});
		bar.add(fileMenu);
		//创建编辑菜单及其菜单项
		JMenu editMenu=new JMenu("编辑");
		editMenu.setMnemonic('E');
		//剪切菜单项
		JMenuItem cutItem=new JMenuItem("剪切");
		cutItem.setMnemonic('T');
		editMenu.add(cutItem);
		cutItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				selectText=displayText.getSelectedText();//取得选定的文本
				int start=displayText.getSelectionStart();
				int end=displayText.getSelectionEnd();
				displayText.replaceRange("", start, end);
			}
		});
		//复制菜单项
		JMenuItem copyItem=new JMenuItem("复制");
		copyItem.setMnemonic('C');
		editMenu.add(copyItem);
		copyItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				selectText=displayText.getSelectedText();
			}
		});
		//粘贴
		JMenuItem pasteItem=new JMenuItem("粘贴");
		pasteItem.setMnemonic('P');
		editMenu.add(pasteItem);
		pasteItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				int position=displayText.getCaretPosition();//获得鼠标当前位置
				displayText.insert(selectText, position);//插入到鼠标当前位置
			}
		});
		editMenu.addSeparator();
		//替换
		JMenuItem swapItem=new JMenuItem("替换");
		swapItem.setMnemonic('R');
		editMenu.add(swapItem);
		swapItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				JPanel swapPanel=new JPanel();
				JLabel lookupLabel=new JLabel("要替换的内容");
				JTextField inputText=new JTextField(10);
				JLabel swapLabel=new JLabel("替换为");
				JTextField changetoText=new JTextField(10);
				swapPanel.add(lookupLabel);
				swapPanel.add(inputText);
				swapPanel.add(swapLabel);
				swapPanel.add(changetoText);
				JOptionPane.showMessageDialog(null,swapPanel);
				String text=displayText.getText();//获取整个文本内容
				String changeText=text.replaceFirst(inputText.getText(), changetoText.getText());
				displayText.setText(changeText);
			}
		});
		//全部替换的实现
		JMenuItem aswapItem=new JMenuItem("全部替换");
		aswapItem.setMnemonic('Q');
		editMenu.add(aswapItem);
		aswapItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				JPanel swapPanel=new JPanel();
				JLabel lookupLabel=new JLabel("要替换的内容");
				JTextField inputText=new JTextField(10);
				JLabel swapLabel=new JLabel("替换为");
				JTextField changetoText=new JTextField(10);
				swapPanel.add(lookupLabel );
				swapPanel.add(inputText );
				swapPanel.add(swapLabel );
				swapPanel.add(changetoText );
				JOptionPane.showMessageDialog(null, swapPanel);
				String text=displayText.getText();
				String changeText=text.replaceAll(inputText.getText(),changetoText.getText() );
				displayText.setText(changeText);
			}
		});
		editMenu.addSeparator();
		//插入子菜单
		JMenuItem insertItem=new JMenuItem("插入文本");
		insertItem.setMnemonic('K');
		editMenu.add(insertItem);
		insertItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
			JPanel insertPanel=new JPanel();
			JLabel insertLabel=new JLabel("要插入的内容");
			JTextField inputText=new JTextField(10);
			insertPanel.add(insertLabel);
			insertPanel.add(inputText);
			JOptionPane.showMessageDialog(null, insertPanel);
			int fromIndex=displayText.getCaretPosition();
			displayText.insert(inputText.getText(), fromIndex);
			}
		});
		//删除子菜单
		JMenuItem RemoveItem=new JMenuItem("删除");
		RemoveItem.setMnemonic('G');
		editMenu.add(RemoveItem);
		RemoveItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int start=displayText.getSelectionStart();
				int end=displayText.getSelectionEnd();
				displayText.replaceRange(null, start, end);
			}
		
		});
		editMenu.addSeparator();
		bar.add(editMenu);
		//创建格式菜单及其菜单项
		JMenu formatMenu=new JMenu("格式");
		formatMenu.setMnemonic('R');
		//自动换行的功能切换
		JMenuItem changeItem=new JMenuItem("自动换行");
		changeItem.setMnemonic('W');
		formatMenu.add(changeItem);
		changeItem.addActionListener(
				new ActionListener() {
					boolean var=false;
					public void actionPerformed(ActionEvent event) {
						if(var)var=false;
						else var=true;
						displayText.setLineWrap(var);
					}
				});
		//颜色菜单项
		String colors[]= {"黑","蓝","红","绿"};
		JMenu colorMenu=new JMenu("颜色");
		colorMenu.setMnemonic('C');
		colorItems=new JRadioButtonMenuItem[colors.length];
		colorGroup=new ButtonGroup();
		ItemHandler itemHandler=new ItemHandler();
		//创建颜色按钮监听器
		for(int count=0;count<colors.length;count++) {
			colorItems[count]=new JRadioButtonMenuItem(colors[count]);
			colorMenu.add(colorItems[count]);
			colorGroup.add(colorItems[count]);
			colorItems[count].addActionListener((ActionListener) itemHandler);
		}
		//默认颜色
		colorItems[0].setSelected(true);
		//将颜色菜单项菜单加入菜单
		formatMenu.add(colorMenu);
		formatMenu.addSeparator();
		//字体菜单项
		JMenu fontMenu=new JMenu("字体");
		fontMenu.setMnemonic('n');
		fonts=new JRadioButtonMenuItem[fontNames.length];
		fontGroup=new ButtonGroup();
		//创建字体按钮监听器
		for(int count=0;count<fonts.length;count++) {
			fonts[count]=new JRadioButtonMenuItem(fontNames[count]);
			fontMenu.add(fonts[count]);
			fontGroup.add(fonts[count]);
			fonts[count].addActionListener((ActionListener) itemHandler);
		}
		//默认字体
		fonts[0].setSelected(true);
		fontMenu.addSeparator();
		//设置风格菜单
		styleItem=new JCheckBoxMenuItem[styleNames.length];
		for(int count=0;count<styleNames.length;count++) {
			styleItem[count]=new JCheckBoxMenuItem(styleNames[count]);
			fontMenu.add(styleItem[count]);
			StyleHandler styleHandler=new StyleHandler();
			styleItem[count].addItemListener(styleHandler);
		}
		formatMenu.add(fontMenu);
		bar.add(formatMenu);
		//创建查找菜单
		JMenu searchMenu=new JMenu("查找");
		searchMenu.setMnemonic('H');
		//添加向前查找菜单项
		JMenuItem frontItem=new JMenuItem("向前查找");
		frontItem.setMnemonic('F');
		searchMenu.add(frontItem);
		frontItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				JPanel swapPanel=new JPanel();
				JLabel seekLabel=new JLabel("要查找的内容");
				JTextField inputText=new JTextField(20);
				swapPanel.add(seekLabel);
				swapPanel.add(inputText);
				JOptionPane.showMessageDialog(null, swapPanel);
				String text=displayText.getText();//获得整个文本内容
				int fromIndex=displayText.getCaretPosition();
			int lastfromIndex=text.indexOf(inputText.getText(),fromIndex);
			displayText.setCaretPosition(lastfromIndex);
			displayText.moveCaretPosition(lastfromIndex+inputText.getText().length());//使查找到的子字符串显示
			}
		});
		//添加向后查找菜单项
		JMenuItem backItem=new JMenuItem("向后查找");
		backItem.setMnemonic('B');
		searchMenu.add(backItem);
		backItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				JPanel swapPanel=new JPanel();
				JLabel seekLabel=new JLabel("要查找的内容");
				JTextField inputText=new JTextField(20);
				swapPanel.add(seekLabel);
				swapPanel.add(inputText);
				JOptionPane.showMessageDialog(null, swapPanel);
				String text=displayText.getText();
				int fromIndex=displayText.getCaretPosition();
				int lastfromIndex=text.lastIndexOf(inputText.getText(),fromIndex);
				displayText.setCaretPosition(lastfromIndex);
				displayText.moveCaretPosition(lastfromIndex+inputText.getText().length());
			}
		});
		bar.add(searchMenu);//添加
		//创建帮助菜单
		JMenu helpMenu=new JMenu("帮助");
		helpMenu.setMnemonic('H');
		//设置“关于”菜单项
		JMenuItem aboutItem=new JMenuItem("关于");
		aboutItem.setMnemonic('A');
		helpMenu.add(aboutItem);
		aboutItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				JOptionPane.showMessageDialog(wenben.this,"文本编辑器","关于",JOptionPane.PLAIN_MESSAGE);
				rowNumber=displayText.getRows();
				JOptionPane.showMessageDialog(null,""+rowNumber);
			}
		});
		//添加帮助菜单项
		JMenuItem helpItem=new JMenuItem("帮助主题");
		helpItem.setMnemonic('H');
		helpMenu.add(helpItem);
		helpItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				JTextArea helpText=new JTextArea("格式里的自动换行说明\n"+"复制粘贴可插入\n标题栏显示行数");
				JScrollPane scroller=new JScrollPane(helpText);
				JOptionPane.showMessageDialog(null,scroller);
			}
		});
		bar.add(helpMenu);//添加
		//设置字体选项面板
		//初始化字体大小数组
		for(int i=0;i<size.length;i++) {
			sizeString[i]=""+(i+12)*2;
			size[i]=(i+12)*2;
		}
		Container container=getContentPane();
		container.setLayout(new BorderLayout());
		toolPanel=new JPanel();
		JLabel label1=new JLabel("字体名称");
		toolPanel.add(label1);
		fontBox=new JComboBox(fontNames);
		fontBox.addItemListener(//事件处理
				new ItemListener() {
					public void itemStateChanged(ItemEvent event) {
						if(event.getStateChange()==ItemEvent.SELECTED) {
							displayText.setFont(new Font(fontNames[fontBox.getSelectedIndex()],displayText.getFont().getStyle(),displayText.getFont().getSize()));
							
						}
					}
				});
		toolPanel.add(fontBox);//添加
		JLabel label2=new JLabel("字体风格");
		toolPanel.add(label2);
		String style_name[]= {"常规","倾斜","粗体","倾斜加粗体"};
		styleBox=new JComboBox(style_name);
		styleBox.addItemListener(//事件处理
				new ItemListener() {
					public void itemStateChanged(ItemEvent event) {
						if(event.getStateChange()==ItemEvent.SELECTED) {
							if(styleBox.getSelectedIndex()==0)style=Font.PLAIN;
							if(styleBox.getSelectedIndex()==1)style=Font.ITALIC;
							if(styleBox.getSelectedIndex()==2)style=Font.BOLD;
							if(styleBox.getSelectedIndex()==3)style=Font.ITALIC+Font.BOLD;
							displayText.setFont(new Font(displayText.getFont().getName(),style,displayText.getFont().getSize()));
							
						}
					}
				}
				);
		toolPanel.add(styleBox);//将风格栏加入面板
		JLabel label3=new JLabel("字号");
		toolPanel.add(label3);
		sizeBox=new JComboBox(sizeString);
		sizeBox.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent event) {
				if(event.getStateChange()==ItemEvent.SELECTED) {
					displayText.setFont(new Font(displayText.getFont().getName(),displayText.getFont().getStyle(),size[sizeBox.getSelectedIndex()]));
				}
			}
		});
		toolPanel.add(sizeBox);//将字号栏加入面板
		container.add(toolPanel,BorderLayout.NORTH);
		//设置面板显示文本
		displayText=new JTextArea();
		displayText.setForeground(colorvalues[0]);
		displayText.setFont(new Font("Serif",Font.PLAIN,24));
		scroll= new JScrollPane(displayText,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		container.add(scroll,BorderLayout.CENTER);
		displayText.addKeyListener(//通过对displayText注册键盘事件来获得当前文本的行数
				new KeyListener() {
					public void keyPressed(KeyEvent event) {
						rowNumber=displayText.getLineCount();//获得文本区的函数
						setTitle("共有"+rowNumber+"行");
					}
					public void  keyReleased(KeyEvent event) {
						
					}
					public void keyTyped(KeyEvent event) {
						
					}
				});
		setSize(700,500);
		setVisible(true);
	}
	//主函数
	public static void main(String[] args) {
		wenben application=new wenben();
		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	//字体和颜色监听器
	private class ItemHandler implements ActionListener{
		public void actionPerformed(ActionEvent event) {
			//颜色
			for(int count=0;count<colorItems.length;count++)
				if(colorItems[count].isSelected()) {
					displayText.setForeground(colorvalues[count]);
					break;
				}
			//字体
			for(int count=0;count<fonts.length;count++)
				if(event.getSource()==fonts[count]) {
					displayText.setFont(new Font(fonts[count].getText(),style,72));
					break;
				}
			repaint();//系统后台调用了paint方法
		}
	}
	private class StyleHandler implements ItemListener{
		//处理字体风格选项
		public void itemStateChanged(ItemEvent e) {
			style=0;
			if(styleItem[0].isSelected())
				style+=Font.BOLD;
			if(styleItem[1].isSelected())
				style+=Font.ITALIC;
			displayText.setFont(new Font(displayText.getFont().getName(),style,72));
			repaint();
		}
	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值