1、界面: 代码(编译后可直接运行): //简单的类似记事本的文档编辑器 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.io.*; import java.awt.font.*; import javax.swing.undo.UndoManager; public class MyTxt { public static void main(String[] args) { Aframe fr
2、ame = new Aframe(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show(); } } class Aframe extends JFrame { public Aframe() { setTitle("我的记事本"); setSize(WIDTH, HEIGHT); Container contentPane = getContentPane(); JPanel txtPanel = new JPanel();
3、 JPanel comboxPanel = new JPanel(); JPanel textPanel = new JPanel(); txtArea=new JTextArea("",17,40); JScrollPane scrollPane =new JScrollPane(txtArea); txtPanel.add(scrollPane); contentPane.add(comboxPanel,BorderLayout.NORTH); contentPane.add
4、txtPanel); contentPane.add(textPanel,BorderLayout.SOUTH); //Caidan lan:添加主菜单并设置快捷键 JMenuBar menuBar =new JMenuBar(); setJMenuBar(menuBar); fileMenu=new JMenu("文件(F)"); editMenu=new JMenu("编辑(E)"); typeMenu=new JMenu("格式(O)"); viewMenu=new JMenu("查看(V)"); helpMenu=new JMen
5、u("帮助(H)"); aboutMenu=new JMenu("关于(A)"); fileMenu.setMnemonic('F'); editMenu.setMnemonic('E'); typeMenu.setMnemonic('O'); viewMenu.setMnemonic('V'); helpMenu.setMnemonic('H'); aboutMenu.setMnemonic('A'); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(typeMen
6、u); menuBar.add(viewMenu); menuBar.add(aboutMenu); menuBar.add(helpMenu); //wenjian“文件”菜单的子菜单添加以及设置加速器,监听器 aa=fileMenu.add(new ShowAction("新建")); aa.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); ab=fileMenu.add(new ShowAction("打开")); ab.setAcc
7、elerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); ac=fileMenu.add(new ShowAction("保存")); ac.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); ad=fileMenu.add(new ShowAction("另存为")); ad.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,Input
8、Event.CTRL_MASK)); fileMenu.addSeparator(); ae=fileMenu.add(new ShowAction("页面设置")); ae.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK)); af=fileMenu.add(new ShowAction("打印")); af.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
9、fileMenu.addSeparator();//分割线 ag=fileMenu.add(new ShowAction("退出")); ag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); //bianji“编辑”菜单的子菜单添加以及设置加速器,监听器 ah=editMenu.add(new ShowAction("撤消")); editMenu.addSeparator(); ah.setAccelerator(KeyStroke.getKeyStro
10、ke(KeyEvent.VK_Z,InputEvent.CTRL_MASK)); ai=editMenu.add(new ShowAction("剪切")); ai.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); aj=editMenu.add(new ShowAction("复制")); aj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); an=editM
11、enu.add(new ShowAction("粘贴")); an.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK)); ak=editMenu.add(new ShowAction("删除")); ak.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK)); editMenu.addSeparator(); al=editMenu.add(new ShowAction("
12、查找")); al.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK)); am=editMenu.add(new ShowAction("全选")); am.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); //geshi“格式”菜单的子菜单添加以及设置加速器,监听器 zdhh=new JMenu("自动换行(L)"); zdhh.setMnemonic('L'
13、); typeMenu.add(zdhh); ButtonGroup group =new ButtonGroup(); xz=new JRadioButtonMenuItem("选择"); xz.addActionListener(new ShowAction("选择")); xz.setSelected(true); qxxz=new JRadioButtonMenuItem("取消"); qxxz.addActionListener(new ShowAction("取消")); qxxz.setSelected(true); g
14、roup.add(xz);group.add(qxxz); zdhh.add(xz);zdhh.add(qxxz); bj=typeMenu.add(new ShowAction("背景颜色")); bj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); zt=typeMenu.add(new ShowAction("字体")); zt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.C
15、TRL_MASK)); //字体弹出框中的“确定”按钮 que=new Button("确定"); que.addActionListener(new boxlistener()); //chakan“查看”菜单的子菜单添加以及设置加速器,监听器 ztl=viewMenu.add(new ShowAction("状态栏")); ztl.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); //guanyu“关于”菜单的子菜单添加以及设
16、置加速器,监听器 zzxx=aboutMenu.add(new ShowAction("作者信息")); zzxx.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); bq=aboutMenu.add(new ShowAction("版权")); bq.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,InputEvent.CTRL_MASK)); sm=aboutMenu.add(new ShowAction(
17、"声明")); sm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); //bangzhu“帮助”菜单的子菜单添加以及设置加速器,监听器 shm=helpMenu.add(new ShowAction("说明")); shm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); //文本框底部工具栏的设置 toolbar2=new JToolBar();
18、 textPanel.add(toolbar2); text1=new JTextField("就绪",10); text2=new JTextField("欢迎使用该记事本!",10); text3=new JTextField("",10); text4=new JTextField("",10); textPanel.setLayout(new GridLayout(1, 4)); toolbar2.add(text1); toolbar2.add(text2); toolbar2.add(
19、text3); toolbar2.add(text4); text1.setEditable(false); text2.setEditable(false); text3.setEditable(false); text4.setEditable(false); //组合框的设置 //字体 zitiLabel=new JLabel("字体");comboxPanel.add(zitiLabel); String zit[]={"宋体","华文行楷","楷体"
20、"黑体","幼圆"}; zitibox=new JComboBox(zit); comboxPanel.add(zitibox); //颜色 yanseLabel=new JLabel("颜色");comboxPanel.add(yanseLabel); String yans[]={"黑色","蓝色","绿色","红色","黄色","蓝绿色","浅灰色"}; yansebox=new JComboBox(yans); comboxPanel.add(yansebox); //大小 daxiaoLabe
21、l=new JLabel("大小");comboxPanel.add(daxiaoLabel); String dax[]={"15","10","5","20","25","30","35","40","..."}; daxiaobox=new JComboBox(dax); comboxPanel.add(daxiaobox); zitibox.setEditable(true); yansebox.setEditable(true); daxiaobox.setEditable(true); combox
22、Panel.setLayout(new FlowLayout(FlowLayout.LEFT));//靠左排列 //组合框注册监听器 yansebox.addActionListener(new boxlistener()); zitibox.addActionListener(new boxlistener()); daxiaobox.addActionListener(new boxlistener()); txtPanel.setLayout(new GridLayout(1, 1)); //实例化“撤销” um= new Un
23、doManager (); txtArea.getDocument().addUndoableEditListener(um); } //菜单栏的接口实现 private class ShowAction extends AbstractAction { public ShowAction(String name){super(name);} public void actionPerformed(ActionEvent e) { Object s=e.getSource(); //新建 if(s==aa) {
24、 if(txtArea.getText().equals("")) { txtArea.setText(""); } else{ int n=JOptionPane.showConfirmDialog(Aframe.this, "无标题记事本已改变。\n想要保存吗?","记事本",JOptionPane.YES_NO_CANCEL_OPTION);
25、 if(n==JOptionPane.NO_OPTION){ txtArea.setText(""); setTitle("无标题"+"——"+"记事本"); } else if(n==JOptionPane
26、YES_OPTION) { save.setVisible(true); String name=save.getDirectory()+save.getFile(); try { FileOutputStream out=new FileO
27、utputStream(name); out.write(txtArea.getText().getBytes()); out.close(); } catch(IOException a) { System.err.prin
28、tln("保存失败。。!"); } } } } //打开 if(s==ab) { open.setVisible(true); String name=open.getDirectory()+open.getFile(); String name2=open.getFile(); setTitle(name2); try {
29、 FileInputStream in=new FileInputStream(name); byte[] ia=new byte[in.available()]; in.read(ia); txtArea.setText(new String(ia)); in.close(); } catch(IOException a) { System.err.println("获取文件失败!"); } } //另存为 if(s==ad) { s
30、ave.setVisible(true); String name=save.getDirectory()+save.getFile(); try { FileOutputStream out=new FileOutputStream(name); out.write(txtArea.getText().getBytes()); out.close(); } catch(IOException a) { System.err.println("保存失败。。!"); }
31、 shifulingcun=1; } //保存 if(s==ac) { if(shifulingcun!=1) {save.setVisible(true);} String name=save.getDirectory()+save.getFile(); try { FileOutputStream out=new FileOutputStream(name); out.write(txtArea.getText().getBytes()); out.close()
32、 } catch(IOException b) { System.err.println("保存文件失败"); } } //退出 if(s==ag) { int selection = JOptionPane.showConfirmDialog( Aframe.this, "确定退出么?", "退出?", JOptionPane.OK_CANCEL_OPTION, JOptionPane.W
33、ARNING_MESSAGE); if (selection == JOptionPane.OK_OPTION) { System.exit(0); } } //选择自动换行 if(s==xz) { txtArea.setLineWrap(true); } //取消自动换行 if(s==qxxz) { txtArea.setLineWrap(false); }
34、 //背景颜色 if(s==bj) { Color color=JColorChooser.showDialog(Aframe.this, "调色板", txtArea.getBackground()); if(color!=null) txtArea.setBackground(color); } //作者信息 if (s==zzxx) {int selection = JOptionPane.showConfirmDialog(
35、 Aframe.this, "“我的记事本”编写小组成员:刘悦,王征,沈光辉","作者信息", JOptionPane.DEFAULT_OPTION); } //版权 if (s==bq) {int selection = JOptionPane.showConfirmDialog( Aframe.this, "版权所有,盗版必究!","版权", JOptionPane.DEFAULT_OPTION); } //声明 if (s==sm) {int selection = JO
36、ptionPane.showConfirmDialog( Aframe.this, "该程序仅用于实践交流","声明", JOptionPane.DEFAULT_OPTION); } //说明 if (s==shm) {int selection = JOptionPane.showConfirmDialog( Aframe.this, "由于种种原因,该版本记事本还存在很多缺陷,我们将在以后的工作中予以改进","说明", JOptionPane.DEFAULT_OPTION); } /
37、/剪切复制粘贴 if (s==ai|| s==cutTtem) { txtArea.cut(); } if (s==aj) { txtArea.copy(); } if (s==an) { txtArea.paste(); } //删除 if(s==ak) { txtArea.replaceRange("", txtArea.getSelectionStart(), txtArea.getSelection
38、End()); } //全选 if (s==am) { txtArea.selectAll(); } //撤销 if(s==ah) { um.undo(); } //字体 if (s==zt) { tishi.setFont(new Font("华文行楷",1,15));
39、tanchu.setLocation(300,250); tanchu.setSize(200,150); tanchu.setTitle("字体设置"); tanchu.setLayout(new GridLayout(2,2,2,2)); tanchu.add(tishi); tanchu.add(daxiaobox); tanchu.add(que); tanchu.add(zitibox
40、); tanchu.setVisible(true); } //状态栏 aaaaa.setText("当前字体是"+ff+"颜色是"+zzz+"大小是"+kk); if (s==ztl) { tanchu.setLocation(300,250); tanchu.setSize(300,150); tanchu.setTitle(
41、"当前状态"); tanchu.setLayout(new GridLayout(2,2,2,2)); aaaaa.setEditable(false); tanchu.add(aaaaa); tanchu.add(que); tanchu.setVisible(true); } //查找 } } //组合框的接口实现 private class boxliste
42、ner implements ActionListener { public void actionPerformed(ActionEvent ee) { Object ss=yansebox.getSelectedItem(); Object zz=zitibox.getSelectedItem(); Object dx=daxiaobox.getSelectedItem(); String tr=(String)ss; String tz=(String)zz; String td=(String)dx; //字体菜单
43、中弹出菜单“确定”的响应 if (ee.getSource()==que){ tanchu.dispose(); } //颜色 if(tr=="红色"){ txtArea.setForeground(Color.red); zzz="红色"; } if(tr=="黑色"){ txtArea.setForeground(Color.black); zzz="黑色"; } if(tr=="绿色"){ txtArea.setForeground(Colo
44、r.green); zzz="绿色"; } if(tr=="蓝色"){ txtArea.setForeground(Color.blue); zzz="蓝色"; } if(tr=="黄色"){ txtArea.setForeground(Color.yellow); zzz="黄色"; } if(tr=="蓝绿色"){ txtArea.setForeground(Color.cyan); zzz="蓝绿色"; } if(tr=="浅灰色"){ txtA
45、rea.setForeground(Color.lightGray); zzz="浅灰色"; } //字体 if(tz=="华文行楷"){ Font f=txtArea.getFont(); txtArea.setFont(new Font("华文行楷",f.getStyle(),f.getSize())); ff="华文行楷"; } if(tz=="楷体"){ Font f=txtArea.getFont(); txtArea.setFont(new Font("楷体",f.getS
46、tyle(),f.getSize())); ff="楷体"; } if(tz=="宋体"){ Font f=txtArea.getFont(); txtArea.setFont(new Font("宋体",f.getStyle(),f.getSize())); ff="宋体"; } if(tz=="黑体"){ Font f=txtArea.getFont(); txtArea.setFont(new Font("黑体",f.getStyle(),f.getSize())); ff="黑体";
47、 } if(tz=="幼圆"){ Font f=txtArea.getFont(); txtArea.setFont(new Font("幼圆",f.getStyle(),f.getSize())); ff="幼圆"; } //大小 if(td=="5"){ Font f=txtArea.getFont(); txtArea.setFont(new Font(f.getName(),f.getStyle(),5)); kk="5"; } if(td=="10"){ Fo
48、nt f=txtArea.getFont(); txtArea.setFont(new Font(f.getName(),f.getStyle(),10)); kk="10"; } if(td=="15"){ Font f=txtArea.getFont(); txtArea.setFont(new Font(f.getName(),f.getStyle(),15)); kk="15"; } if(td=="20"){ Font f=txtArea.getFont(); txtArea.set
49、Font(new Font(f.getName(),f.getStyle(),20)); kk="20"; } if(td=="25"){ Font f=txtArea.getFont(); txtArea.setFont(new Font(f.getName(),f.getStyle(),25)); kk="25"; } if(td=="30"){ Font f=txtArea.getFont(); txtArea.setFont(new Font(f.getName(),f.getStyle(),3
50、0)); kk="30"; } if(td=="35"){ Font f=txtArea.getFont(); txtArea.setFont(new Font(f.getName(),f.getStyle(),35)); kk="35"; } if(td=="40"){ Font f=txtArea.getFont(); txtArea.setFont(new Font(f.getName(),f.getStyle(),40)); kk="40"; }






