您的位置:首页 > 编程语言 > Java开发

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: