利用swing组件JEditText实现复制,粘贴,剪切功能,JEditText组测MouseListener,实现JPopupMenu右键弹出菜单,依次为JMenuItem,openButton,saveButton注册ActionListener,实现点击事件。
Word.java:
import javax.swing.*;
import javax.swing.JComponent.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.Component.*;
//文本编辑器,打开.保存.右键复制粘贴剪切功能
//java.awt 与 java.awt.event 不是一个类
//
public class Word implements MouseListener,ActionListener{JFrame frame;JPopupMenu popMenu;JPanel panel;JEditorPane editText;JButton openButton;JButton saveButton;JMenuItem paste;JMenuItem copy;JMenuItem cut;JMenuBar menuBar;FileDialog fileDialog; String path;//要保存/打开的文件路径String name;//要保存/打开的文件名
// JMenuItem delete;public static void main(String[] args){Word word=new Word();
}
//初始化界面public Word(){frame=new JFrame();panel=new JPanel();editText=new JEditorPane();popMenu=new JPopupMenu();Font font=new Font("宋体",Font.BOLD,20);openButton=new JButton("open");openButton.setFont(font);saveButton=new JButton("save");saveButton.setFont(font);panel.setLayout(null);Color color=new Color(191,210,200);panel.setBackground(color);paste=new JMenuItem("paste");copy=new JMenuItem("copy");cut=new JMenuItem("cut");
// delete=new JMenuItem("delete");
//try{
// String pathString = "/home/zx/邯郸-刘书锋太极体.ttf";// Font editFont = Font.createFont(Font.BOLD, new File(pathString));
// editText.setFont(editFont);
//}catch(FontFormatException|IOException fe){
// fe.printStackTrace();
//}
// Font editFont=new Font ("宋体",Font.BOLD,20);editText.setBackground(color);editText.setBounds(0,40,780,760);editText.setFont(font);editText.addMouseListener(this);popMenu.add(paste);popMenu.add(copy);popMenu.add(cut);openButton.addActionListener(this);saveButton.addActionListener(this);
// popMenu.add(delete);paste.addActionListener(this);cut.addActionListener(this);copy.addActionListener(this);
// delete.addActionListener(this);//button 设置大小太小会导致显示不出来文字openButton.setBounds(0,10,80,30);saveButton.setBounds(700,10,80,30);saveButton.setBackground(color);openButton.setBackground(color);panel.add(editText);panel.add(openButton);panel.add(saveButton);panel.add(popMenu);frame.setSize(780,800);frame.getContentPane().add(panel);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
//粘贴public void paste(){System.out.println("paste");editText.paste();
}
//复制public void copy(){System.out.println("copy");editText.copy();
}
//剪切public void cut(){System.out.println("cut");editText.cut();}
//打开文件public void open(){System.out.println("Open file!");fileDialog=new FileDialog(frame,"打开文件",FileDialog.LOAD);fileDialog.setVisible(true);path=fileDialog.getDirectory();name=fileDialog.getFile();read();
}
//保存文件public void save(){System.out.println("Save File!");fileDialog=new FileDialog(frame,"保存文件",FileDialog.SAVE);fileDialog.setVisible(true);path=fileDialog.getDirectory();name=fileDialog.getFile();write();}
//读文件public void read(){try{File read=new File(path,name);BufferedReader reader=new BufferedReader(new FileReader(read));//string 类无append()方法StringBuilder builder=new StringBuilder();String line;while((line=reader.readLine())!=null){builder.append(line+"\n");System.out.println(line);
}editText.setText(builder.toString());reader.close();//File类无close()
}catch(IOException e){e.printStackTrace();
//作用域到括号截至 read 找不到
// read.close();
}}
//写文件public void write(){try{File writeFile=new File(path,name);BufferedWriter write=new BufferedWriter(new FileWriter(writeFile));write.write(editText.getText());write.close();
}catch(IOException e){e.printStackTrace();
// writeFile.close();
}}
//鼠标点击事件public void mouseClicked(MouseEvent e){}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mousePressed(MouseEvent e){if(e.getButton()==MouseEvent.BUTTON3)popMenu.show(e.getComponent(),e.getX(),e.getY());
}public void mouseReleased(MouseEvent e){}
//MouseEvent 有什么方法可以返回调用组件的String 或代号?
//用ActionEvent的话不能屏蔽右键选择
// class SpecialListener implements MouseListener{public void actionPerformed(ActionEvent e){System.out.println("我要开始比较啦!");// if(e.getButton()==MouseEvent.BUTTON3){String which=e.getActionCommand();switch(which){case "paste":paste();break;case "copy":copy();break;case "cut":cut();break;case "open":open();break;case "save":save();}
}}
后续功能:改变字体,插入图片

















