java编辑器
2015-05-29 23:41
393 查看
package editor; import java.io.*; import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.*; import javax.swing.JOptionPane; public class TextMenu { public static void main(String[] args) { new MyMenuFrame(); //创建窗口对象 } } class MyMenuFrame extends Frame{ TextArea text;//定义文本域 FileDialog fileDlg; String str,fileName; private Clipboard cb;//系统粘贴板 String board = null;//复制面板 byte byteBuf[] = new byte[10000]; MenuBar m_MenuBar;//定义菜单条 Menu menuFile,menuEdit,sub_Edit_Font,patternEdit,menuHelp,menuSize;//定义菜单项 MenuItem mi_File_New,mi_File_Open,mi_File_Save,mi_File_Close,mi_File_Exit;//定义File中的菜单子项 MenuItem mi_Edit_Cut,mi_Edit_Copy,mi_Edit_Paste;//定义Edit中的菜单子项 MenuItem pattern_Red,pattern_Blue;//定义格式中的菜单子项 MenuItem size_18,size_19,size_20,size_21,size_22;//定义字号中的菜单子项 MenuItem mi_Help,mi_About;//定义Help中的菜单子项 CheckboxMenuItem mi_Font_Style,mi_Font_Size;//定义选择式的菜单子项 PopupMenu popM;//定义弹出式菜单 MenuItem pi_Left,pi_Center,pi_Right;//定义弹出菜单中的菜单子项 Color oldColor; int text_Font_Style,new_Style,text_Font_Size,new_Size; String name; public MyMenuFrame() { // TODO 自动生成的构造函数存根======构造函数 super("简易文本编辑器"); fileDlg = new FileDialog(this, fileName); text = new TextArea(5,30); text.addMouseListener(new HandleMouse());//响应文本域的鼠标事件===调用内部类 add(text,BorderLayout.CENTER);//将文本域加到窗体的中央位置=====边界布局 m_MenuBar = new MenuBar();//创建菜单条 menuFile = new Menu("文件"); mi_File_New = new MenuItem("新建"); mi_File_New.setShortcut(new MenuShortcut(KeyEvent.VK_N));//指定快捷键 mi_File_Open = new MenuItem("打开"); mi_File_Open.setShortcut(new MenuShortcut(KeyEvent.VK_O));//指定快捷键 mi_File_Save = new MenuItem("保存"); mi_File_Save.setShortcut(new MenuShortcut(KeyEvent.VK_S));//指定快捷键 mi_File_Close = new MenuItem("关闭"); mi_File_Exit = new MenuItem("退出"); //接下来是使菜单项响应动作事件 mi_File_New.addActionListener(new HandleAct()); mi_File_Open.addActionListener(new HandleAct()); mi_File_Save.addActionListener(new HandleAct()); mi_File_Close.addActionListener(new HandleAct()); mi_File_Exit.addActionListener(new HandleAct()); //把菜单子项加入到菜单项 menuFile.add(mi_File_New); menuFile.add(mi_File_Open); menuFile.add(mi_File_Save); menuFile.add(mi_File_Close); menuFile.addSeparator();//加一条横向分割线 menuFile.add(mi_File_Exit); menuEdit = new Menu("编辑"); mi_Edit_Copy = new MenuItem("复制"); mi_Edit_Copy.setShortcut(new MenuShortcut(KeyEvent.VK_C)); mi_Edit_Cut = new MenuItem("剪切"); mi_Edit_Cut.setShortcut(new MenuShortcut(KeyEvent.VK_X)); mi_Edit_Paste = new MenuItem("粘贴"); mi_Edit_Paste.setShortcut(new MenuShortcut(KeyEvent.VK_V)); sub_Edit_Font = new Menu("字体"); mi_Font_Style = new CheckboxMenuItem("粗体"); mi_Font_Size = new CheckboxMenuItem("加大"); //接下来是使菜单项响应动作事件 mi_Edit_Copy.addActionListener(new HandleAct()); mi_Edit_Cut.addActionListener(new HandleAct()); mi_Edit_Paste.addActionListener(new HandleAct()); //选择式菜单命令监听者 mi_Font_Style.addItemListener(new HandleItemB()); mi_Font_Size.addItemListener(new HandleItemSize()); //把菜单子项加入到菜单项 sub_Edit_Font.add(mi_Font_Style); sub_Edit_Font.add(mi_Font_Size); menuEdit.add(mi_Edit_Copy); menuEdit.add(mi_Edit_Cut); menuEdit.add(mi_Edit_Paste); menuEdit.addSeparator();//加一条横向分割线 menuEdit.add(sub_Edit_Font); patternEdit =new Menu("格式"); pattern_Blue = new MenuItem("蓝色"); pattern_Red = new MenuItem("红色"); //添加注册事件 pattern_Blue.addActionListener(new HandleAct()); pattern_Red.addActionListener(new HandleAct()); //添加到容器中 patternEdit.add(pattern_Blue); patternEdit.add(pattern_Red); menuSize = new Menu("字号"); size_18 = new MenuItem("18"); size_19 = new MenuItem("19"); size_20 = new MenuItem("20"); size_21 = new MenuItem("21"); size_22 = new MenuItem("22"); //添加注册事件 size_18.addActionListener(new HandleAct()); size_19.addActionListener(new HandleAct()); size_20.addActionListener(new HandleAct()); size_21.addActionListener(new HandleAct()); size_22.addActionListener(new HandleAct()); //添加到相应的容器 menuSize.add(size_18); menuSize.add(size_19); menuSize.add(size_20); menuSize.add(size_21); menuSize.add(size_22); menuHelp = new Menu("帮助"); mi_Help = new MenuItem("帮助"); mi_About = new MenuItem("关于"); //添加注册事件 mi_Help.addActionListener(new HandleAct()); mi_About.addActionListener(new HandleAct()); //添加到相应的容器 menuHelp.add(mi_Help); menuHelp.add(mi_About); //添加到菜单栏中 m_MenuBar.add(menuFile);//把“文件”加载到菜单条中 m_MenuBar.add(menuEdit);//把“编辑”加载到菜单条中 m_MenuBar.add(patternEdit);//把“格式”加载到菜单条中 m_MenuBar.add(menuSize); m_MenuBar.add(menuHelp);//把“帮助”加载到菜单条中 this.setMenuBar(m_MenuBar);//把菜单条加载到整个Frame容器中 //创建弹出式菜单 popM = new PopupMenu(); //给弹出菜单创建菜单项 pi_Left = new MenuItem("左对齐"); pi_Right = new MenuItem("右对齐"); pi_Center= new MenuItem("居中对齐"); //给菜单项添加事件监听 pi_Left.addActionListener(new HandleAct()); pi_Right.addActionListener(new HandleAct()); pi_Center.addActionListener(new HandleAct()); //为弹出菜单添加菜单项 popM.add(pi_Left); popM.add(pi_Right); popM.add(pi_Center); //将弹出菜单加在文本域上 text.add(popM); addWindowListener(new HandleClose());//将Frame 注册给窗口事件的监听者 setSize(600,400); setVisible(true); name = (text.getFont()).getName();//获取文本域字体 text_Font_Style = (text.getFont()).getStyle();//获取文本域样式 new_Style = text_Font_Style; text_Font_Size = (text.getFont()).getSize(); new_Size = text_Font_Size; }//构造函数定义结束 //事件处理开始 class HandleMouse extends MouseAdapter{//内部类(处理文本域中的鼠标事件) @Override public void mouseReleased(MouseEvent e) {//鼠标按键松开事件弹出菜单 // TODO 自动生成的方法存根 if (e.isPopupTrigger()) {//检测鼠标事件是否由弹出菜单引发 popM.show((Component)e.getSource(),e.getX(),e.getY()); }//将弹出菜单显示在用户鼠标点击的地方 super.mouseReleased(e); } } class HandleAct implements ActionListener{//内部类。处理菜单命令 public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 Font oldF = text.getFont();//获取当前就字体 String name = oldF.getName();//保存当前旧字体的字体类型 int size = oldF.getSize();//保存当前字体的大小 switch (e.getActionCommand()) { // File菜单的事件响应 case "新建" : newFile(); break; case "打开" : openFile(); break; case "保存" : saveFile(); break; case "关闭" : closeFile(); break; case "退出" : exit(); break; // Edit菜单事件响应 case "剪切" : cutText(); break; case "复制" : copyText(); break; case "粘贴" : pasteText(); break; //格式菜单响应事件 case "蓝色" : turnBlue(); break; case "红色" : turnRed(); break; //字号菜单响应事件 case "18" : //Font对象有三个参数:字体,字型,字号 text.setFont(new Font(name,oldF.getStyle(),18)); break; case "19" : text.setFont(new Font(name,oldF.getStyle(),19)); break; case "20" : text.setFont(new Font(name,oldF.getStyle(),20)); break; case "21" : text.setFont(new Font(name,oldF.getStyle(),21)); break; case "22" : text.setFont(new Font(name,oldF.getStyle(),22)); break; // Help菜单事件响应 case "帮助" : help(); break; case "关于" : about(); break; default : break; } } public void newFile() { JOptionPane.showMessageDialog(null, "内容已被更改,是否保存"); saveFile(); } public void openFile() { fileDlg.show(); /*fileDlg = new FileDialog(this,"打开文件",FileDialog.LOAD); fileDlg.setDirectory(""); fileDlg.setVisible(true);*/ fileName = fileDlg.getFile(); /*try { File myfile = new File(fileDlg.getDirectory(),fileDlg.getTitle()); RandomAccessFile raf = new RandomAccessFile(myfile, "r"); while (raf.getFilePointer()<raf.length()) { text.append(raf.readLine()+"\n");//读文件并加载到text中 } } catch (IOException e) { // TODO: handle exception System.err.println(e.toString()); }*/ try { FileInputStream in = new FileInputStream(fileName); in.read(byteBuf); in.close(); str = new String(byteBuf); text.setText(str); setTitle("TextEditor-" + fileName); } catch (IOException ioe) { } } public void saveFile() { fileDlg.show(); fileName = fileDlg.getFile(); str = text.getText(); byteBuf = str.getBytes(); try { FileOutputStream out = new FileOutputStream(fileName); out.write(byteBuf); out.close(); } catch (IOException ioe) { } } public void closeFile(){ text.setText(null); } public void exit() { dispose(); System.exit(0); } public void copyText(){//复制 board = text.getSelectedText(); cb.setContents(new StringSelection(board), null); } public void cutText() {//剪切 board = text.getSelectedText(); cb.setContents(new StringSelection(board), null); text.replaceRange("", text.getSelectionStart(), text.getSelectionEnd()); } public void pasteText() {//粘贴 try { Transferable content = cb.getContents(null); String st = (String) content .getTransferData(DataFlavor.stringFlavor); text.replaceRange(st, text.getSelectionStart(), text.getSelectionEnd()); } catch (Exception ex) { } } public void turnBlue() { } public void turnRed() { } public void help() { } public void about() { } } class HandleItemB implements ItemListener{//内部类 (处理"粗体") @Override public void itemStateChanged(ItemEvent e) {//响应选择型菜单项 // TODO 自动生成的方法存根 Font oldF = text.getFont();//获取当前就字体 String name = oldF.getName();//保存当前旧字体的字体类型 int size = oldF.getSize();//保存当前字体的大小 if (((CheckboxMenuItem)e.getSource()).getState()){//查看是否选中 text.setFont(new Font(name,Font.BOLD,size)); } else {//未选中 new_Style = text_Font_Style; text.setFont(new Font(name,new_Style,new_Size)); } } } class HandleItemSize implements ItemListener{//内部类 处理大字体 @Override public void itemStateChanged(ItemEvent e) {//响应选择型菜单项 // TODO 自动生成的方法存根 Font oldF = text.getFont();//获取当前就字体 String name = oldF.getName();//保存当前旧字体的字体类型 int size = oldF.getSize();//保存当前字体的大小 if (((CheckboxMenuItem)e.getSource()).getState()){//查看是否选中 new_Size = text_Font_Size*2; text.setFont(new Font(name,new_Style,new_Size)); } else { new_Size = text_Font_Size; text.setFont(new Font(name,new_Style,new_Size)); } } } class HandleClose extends WindowAdapter{//内部类 (处理窗口事件) @Override public void windowClosing(WindowEvent e) { // TODO 自动生成的方法存根 dispose(); System.exit(0);//退出程序 super.windowClosing(e); } } }
相关文章推荐
- java连接SQL数据库
- java之单元测试
- JAVA 想让类无法new,可以使用private将类的构造函数改为私有的,这样new的时候就会报错了
- 关于Spring MVC非常详细的介绍(一位大神写的,强烈推荐)
- Java实现Web服务器
- 跟我学Java反射——一步曲
- java 制作类似DOS功能
- JAVA 主函数(主方法)
- spring4.0源码下载
- 疯狂Java学习笔记(60)----------8张图理解Java
- Java NIO原理图文分析及代码实现
- 疯狂Java学习笔记(57)------------NIO:浅析I/O模型
- 疯狂Java学习笔记(58)-----------NIO概述
- 将github上的工程导入到Myeclipse中
- 疯狂Java学习笔记(56)------------对象序列化
- Spring Template(三) ——ORM 设计与实现
- Java synchronized 关于锁的对象顺序问题
- Java Swing 中插入图片背景
- Eclipse + Android + 真机调试的问题
- LeetCode-java实现-T1-Two Sum