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[]; 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(,);
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("");
size_19 = new MenuItem("");
size_20 = new MenuItem("");
size_21 = new MenuItem("");
size_22 = new MenuItem("");
//添加注册事件
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(,);
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 "" :
//Font对象有三个参数:字体,字型,字号
text.setFont(new Font(name,oldF.getStyle(),));
break;
case "" :
text.setFont(new Font(name,oldF.getStyle(),));
break;
case "" :
text.setFont(new Font(name,oldF.getStyle(),));
break;
case "" :
text.setFont(new Font(name,oldF.getStyle(),));
break;
case "" :
text.setFont(new Font(name,oldF.getStyle(),));
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();
}
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*;
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();//退出程序
super.windowClosing(e);
}
}
}

java编辑器的更多相关文章

  1. 巧用Eclipse Java编辑器调试

    在使用Eclipse开发Java Web应用时,使用的编辑器不但能够为开发者提供代码编写.辅助提示和实时编译等常用功能,而且还能够对Java源代码进行快捷修改.重构和语法纠错等高级操作.通过Eclip ...

  2. 02.制作一个自己的 Java 编辑器

    难度中等,适合 Java 基础扎实,对 Java 核心 API 有所熟悉的同学学习 No1.制作GUI界面 一.实验介绍 1.1 实验内容 本节课程的主要内容是准备开发环境,建立项目并完成 GUI 界 ...

  3. 有关java编辑器myeclipse编辑网站的一些设置(个人习惯)

    一.界面显示设置 首先进入一个新的空间,里面的设置肯定都是默认的.点击上方导航栏的window-Perferences-Appearance可以去进行设置界面的显示,Theme中可以选择windows ...

  4. 2.java编辑器和java大致内容

    离开了宇宙第一IDE.对java的编辑的选择有点茫然. .net只有一个你不用选择.java好几个.对于追求完美的我来说.总想选个完美的.上网百度可一下.最经典的当然是eclipse了. 但是觉得有点 ...

  5. java笔记1:准备工作:java历史、Java环境、java编辑器、cmd常用命令

    java的历史 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称. 由James Gosling和同事们共同研发,并在1995年正 ...

  6. java编辑器eclipse如何更改jdk版本

    第一步:右键点击项目选择properties   第二步:选择Java Build Path         第三步:选择libraries   第四步:选中当前jre再点击右侧Edit   第五步: ...

  7. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  8. java如何在eclipse编译时自动生成代码

    用eclipse写java代码,自动编译时,如何能够触发一个动作,这个动作是生成本项目的代码,并且编译完成后,自动生成的代码也编译好了, java编辑器中就可以做到对新生成的代码的自动提示? 不生成代 ...

  9. JAVA学习笔记(二):eclipse智能提示(转)

    存盘 Ctrl+s(肯定知道)注释代码 Ctrl+/取消注释 Ctrl+\(Eclipse3已经都合并到Ctrl+/了)代码辅助 Alt+/快速修复 Ctrl+1代码格式化 Ctrl+Shift+f整 ...

随机推荐

  1. bootstarp基本模板

    <!DOCTYPE html><!--html5文档格式--> <html lang="zh-CN"><!--申明语言是中文简体--> ...

  2. 内存管理之三——Cocos2d-x学习历程(七)

    1.容器---2.0版本 Cocos2d-x引擎为我们提供了CCArray.CCDictionary等Objective-C风格的容器.使用Cocos2d-x容器的一个重要原因在于Cocos2d-x的 ...

  3. jquery解决onmouseover和onmouseout合用的bug问题

    经常会遇到鼠标放到一个元素上显示另外一个元素,这两个元素是父子关系,比如在A上绑定mouseover和mouseout事件来显示或隐藏B元素,A元素包含B元素,当鼠标移到B元素后浏览器认为你移开了A, ...

  4. Oracle数据库的启动和关闭

    深刻理解Oracle数据库的启动和关闭 Oracle数据库提供了几种不同的数据库启动和关闭方式,本文将详细介绍这些启动和关闭方式之间的区别以及它们各自不同的功能. 一.启动和关闭Oracle数据库 对 ...

  5. linux杂记(三)linux指令介绍

    [root@linux ~]# command [-options] parameter1 parameter2 说明: 最左边的root显示的是[目前使用者的账号],而@之后接的是linux即[主机 ...

  6. OpenCV学习 2:播放AVI视频

    原创文章,欢迎转载,转载请注明出处 第二个程序,播放视频.用opencv做起来是如此的简单..哈哈.           学Opencv,只是为了在它的基础上实现工程应用,而它里面高深的理论我等屌丝只 ...

  7. React和Angular

    React和Angular 你若装逼,请带我飞! 从前,从前,听说React只负责UI,话说写Angular代码就像写后端,现在看来,React赢在情怀上了: 我认为没必要老是拿React和Angul ...

  8. MySQLdb callproc 方法

    MySQLdb执行存储过程时就要调用 callproc 方法.它返回的是调用时的参数列表. MySQL 中存储过程的定如下: delimiter // create procedure proc_in ...

  9. easyui datagrid 列的内容超出所定义的列宽时,自动换行

    定义表单  nowrap="false"可以使得列中的内容超出所定义的列宽是就会自动换行pagination : true, // 当true时在DataGrid底部显示一个分页工 ...

  10. Oracle单个数据文件超过32G后扩容

    Oracle单个数据文件超过32G后扩容   表空间数据文件容量与DB_BLOCK_SIZE的设置有关,而这个参数在创建数据库实例的时候就已经指定.DB_BLOCK_SIZE参数可以设置为4K.8K. ...