import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import java.io.*;
/**main */
public class NotepadTest{
public static void main(String[] args){
Notepad notepadFrame=new Notepad();
notepadFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
notepadFrame.setLocation(width,height);
notepadFrame.setVisible(true);
}
static int width=Toolkit.getDefaultToolkit().getScreenSize().width/4;
static int height= Toolkit.getDefaultToolkit().getScreenSize().height/4;
}
/**a Notepad frame */
class Notepad extends JFrame{
public Notepad( ){
setTitle("我的记事本");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
JMenuBar menuBar=new JMenuBar();
this.setJMenuBar(menuBar);
JMenu fileMenu=new JMenu("文件(F)");
fileMenu.setMnemonic(KeyEvent.VK_F);
JMenuItem newItem=fileMenu.add(new TextAction("新建(N)"));
newItem.setMnemonic(KeyEvent.VK_N);
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
JMenuItem openItem=fileMenu.add(new TextAction("打开(O)"));
openItem.setMnemonic(KeyEvent.VK_O);
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
JMenuItem saveItem=fileMenu.add(new TextAction("保存(S)"));
saveItem.setMnemonic(KeyEvent.VK_S);
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
JMenuItem saveAsItem=fileMenu.add(new TextAction("另存为(A)"));
saveAsItem.setMnemonic(KeyEvent.VK_A);
fileMenu.addSeparator();
JMenuItem pageSetupItem=fileMenu.add(new TextAction("页面设置(U)"));
pageSetupItem.setMnemonic(KeyEvent.VK_U);
pageSetupItem.setEnabled(false);
JMenuItem printItem=fileMenu.add(new TextAction("打印(P)"));
printItem.setMnemonic(KeyEvent.VK_P);
printItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
printItem.setEnabled(false);
fileMenu.addSeparator();
JMenuItem exitItem= fileMenu.add(new
AbstractAction("退出(X)"){
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
exitItem.setMnemonic(KeyEvent.VK_X);
JMenu editMenu=new JMenu("编辑(E)");
editMenu.setMnemonic(KeyEvent.VK_E);
Action retractAction=new TextAction("撤消(U)");
JMenuItem retractItem=editMenu.add(retractAction);
retractItem.setMnemonic(KeyEvent.VK_U);
retractItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));
retractItem.setEnabled(false);
editMenu.addSeparator();
Action cutAction=new TextAction("剪贴(T)");
JMenuItem cutItem=editMenu.add(cutAction);
cutItem.setMnemonic(KeyEvent.VK_T);
cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
Action copyAction=new TextAction("复制(C)");
JMenuItem copyItem=editMenu.add(copyAction);
copyItem.setMnemonic(KeyEvent.VK_C);
copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
Action pasteAction=new TextAction("粘贴(P)");
JMenuItem pasteItem=editMenu.add(pasteAction);
pasteItem.setMnemonic(KeyEvent.VK_P);
pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
Action deleteAction=new TextAction("删除(L)");
JMenuItem deleteItem=editMenu.add(deleteAction);
deleteItem.setMnemonic(KeyEvent.VK_L);
deleteItem.setAccelerator(KeyStroke.getKeyStroke("DELETE"));
editMenu.addSeparator();
JMenuItem lookupItem=editMenu.add(new TextAction("查找(F)"));
lookupItem.setMnemonic(KeyEvent.VK_F);
lookupItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
lookupItem.setEnabled(false);
JMenuItem lookupNextItem=editMenu.add(new TextAction("查找下一个(N)"));
lookupNextItem.setMnemonic(KeyEvent.VK_N);
lookupNextItem.setAccelerator(KeyStroke.getKeyStroke("F3"));
lookupNextItem.setEnabled(false);
JMenuItem replaceItem=editMenu.add(new TextAction("替换(R)"));
replaceItem.setMnemonic(KeyEvent.VK_R);
replaceItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK));
replaceItem.setEnabled(false);
JMenuItem gotoItem=editMenu.add(new TextAction("转到(G)"));
gotoItem.setMnemonic(KeyEvent.VK_G);
gotoItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,InputEvent.CTRL_MASK));
gotoItem.setEnabled(false);
editMenu.addSeparator();
Action selectAllAction=new TextAction("全选(A)");
JMenuItem selectAllItem=editMenu.add(selectAllAction);
selectAllItem.setMnemonic(KeyEvent.VK_A);
selectAllItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
JMenuItem timeDateItem=editMenu.add(new TextAction("时间/日期(D)"));
timeDateItem.setMnemonic(KeyEvent.VK_D);
timeDateItem.setAccelerator(KeyStroke.getKeyStroke("F5"));
timeDateItem.setEnabled(false);
JMenu formatMenu=new JMenu("格式(O)");
formatMenu.setMnemonic(KeyEvent.VK_O);
lineWrapItem=formatMenu.add(new TextAction("自动换行(W)"));
lineWrapItem.setMnemonic(KeyEvent.VK_W);
JMenuItem fontItem=formatMenu.add(new TextAction("字体(F)"));
fontItem.setMnemonic(KeyEvent.VK_F);
fontItem.setEnabled(false);
JMenu viewMenu=new JMenu("查看(V)");
viewMenu.setMnemonic(KeyEvent.VK_V);
JMenuItem stateItem=viewMenu.add(new TextAction("状态栏(S)"));
stateItem.setMnemonic(KeyEvent.VK_S);
stateItem.setEnabled(false);
JMenu helpMenu=new JMenu("帮助(H)");
helpMenu.setMnemonic(KeyEvent.VK_H);
JMenuItem helpTextItem=helpMenu.add(new TextAction("帮助主题(H)"));
helpTextItem.setMnemonic(KeyEvent.VK_H);
helpMenu.addSeparator();
JMenuItem aboutMyNotepadItem=helpMenu.add(new TextAction("关于我的记事本(A)"));
aboutMyNotepadItem.setMnemonic(KeyEvent.VK_A);
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(formatMenu);
menuBar.add(viewMenu);
menuBar.add(helpMenu);
JPopupMenu popup=new JPopupMenu();
popup.add(cutAction);
popup.add(copyAction);
popup.add(pasteAction);
popup.add(deleteAction);
popup.addSeparator();
popup.add(selectAllAction);
area=new JTextArea();
//area.setLineWrap(true);
area.setFont(new Font("serif",Font.BOLD,16));
area.setWrapStyleWord(true);
area.setComponentPopupMenu(popup);
JScrollPane scrollPane=new JScrollPane(area,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED ,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(scrollPane);
}
private JFrame frame=this;
private static int DEFAULT_WIDTH=600;
private static int DEFAULT_HEIGHT=400;
private JTextArea area;
JMenuItem lineWrapItem;
private JFileChooser fileChooser1;
private JFileChooser fileChooser2;
private void openFile() throws IOException{
String filePath=fileChooser1.getSelectedFile().getAbsolutePath();
FileReader fr=new FileReader(filePath);
BufferedReader br = new BufferedReader(fr);
String str;
while ((str = br.readLine()) != null)
area.setText(area.getText() + str + "/n ");
br.close();
fr.close();
}
private void saveFile() throws IOException{
String filepath2 = fileChooser2.getSelectedFile().getAbsolutePath();
FileWriter fw = new FileWriter(filepath2);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
pw.print(area.getText());
bw.close();
fw.close();
}
private class TextAction extends AbstractAction
{
public TextAction(String name)
{
super(name);
}
public void actionPerformed(ActionEvent event)
{
System.out.println(getValue(Action.NAME)+"selected");
String command=event.getActionCommand();
if("新建(N)".equals(command)){
area.setText(" ");
frame.setTitle("无标题-记事本");
}
if("打开(O)".equals(command)){
fileChooser1=new JFileChooser();
fileChooser1.showOpenDialog(frame);
try{
openFile();
}catch (IOException e){
}
}
if("保存(S)".equals(command)){
fileChooser2=new JFileChooser();
fileChooser2.showSaveDialog(frame);
try{
saveFile();
}catch (IOException e){
}
}
if("另存为(A)".equals(command)){
fileChooser2=new JFileChooser();
fileChooser2.showSaveDialog(frame);
try{
saveFile();
}catch (IOException e){
}
}
if("剪贴(T)".equals(command)){
area.cut();
}
if("复制(C)".equals(command)){
area.copy();
}
if("粘贴(P)".equals(command)){
area.paste();
}
if("删除(L)".equals(command))
{
String st=area.getText();
int z=st.length();
int x=0;int y=0;
x=area.getSelectionStart();
y=area.getSelectionEnd();
System.out.println(x+"/n"+y+"/n"+z);
try{
System.out.println(area.getText(0,x));
System.out.println(area.getText(y,z-y));
area.setText(area.getText(0,x)+area.getText(y,z-y));
}catch (BadLocationException e) {
}
}
if("全选(A)".equals(command)){
area.selectAll();
}
if("自动换行(W)".equals(command)){
if(!area.getLineWrap())
{
area.setLineWrap(true);
lineWrapItem.setText("√自动换行(W)");
command="√自动换行(W)";
}
}
else if("√自动换行(W)".equals(command))
{
area.setLineWrap(false);
lineWrapItem.setText("自动换行(W)");
command="自动换行(W)";
}
if("关于我的记事本(A)".equals(command)){
JOptionPane.showMessageDialog(null,"版主:李海峰/n时间:10/30/2007","关于我的记事本",JOptionPane.INFORMATION_MESSAGE);
}
if("帮助主题(H)".equals(command)){
JOptionPane.showMessageDialog(null,"我的第一个记事本,谢谢大家使用");
}
}
}
}