java记事本

本文介绍了一个使用Java Swing编写的简易记事本程序,具备基本的文件操作功能,如新建、打开、保存等,并实现了查找和替换文本的功能。
[java]  view plain  copy
  1. package java实验九;  
  2. import java.awt.*;  
  3. import java.awt.event.*;  
  4. import java.io.*;  
  5. import javax.swing.*;  
  6. public class NotePadDemo extends JFrame implements ActionListener{  
  7. private JMenuItem jmiNew,jmiOpen,jmiSave,jmiExit,jmiAbout,jmiTopic,jmiCut,jmiCopy,jmiPaste,jmiUndo,jmialldo,jmiRedo,jmifind,jmirepalace;//打开的菜单名字  
  8. private JTextArea jta=new JTextArea();              //文本域  
  9. private JTextField ca,tad;                               //输入框  
  10. private JLabel tidai=new JLabel("代替成:");   
  11. private JLabel jlbStatus=new JLabel();            //    显示域      
  12. private JButton buttonzao=new JButton();  
  13. private JButton butttidai=new JButton();  
  14. private JFileChooser chooser=new JFileChooser();      //对话框  
  15. public NotePadDemo() {  
  16.     jta.setFont(new Font(null,0,15));          //设置文本域属性  
  17.     setTitle("记事本");  
  18.     JMenuBar mb=new JMenuBar();                 //菜单栏  
  19.     setJMenuBar(mb);                           //设置mb菜单属性  
  20.     JMenu fileMenu=new JMenu("文件(F)");           
  21.     JMenu editMenu=new JMenu("编辑(E)");  
  22.     JMenu geshiMenu=new JMenu("格式(G)");  
  23.     JMenu helpMenu=new JMenu("关于(H)");    
  24.     fileMenu.setMnemonic('F');                     //设置热键f  
  25.     editMenu.setMnemonic('E');                     //设置热键f  
  26.     geshiMenu.setMnemonic('G');                     //设置热键f  
  27.     helpMenu.setMnemonic('H');                     //设置热键f  
  28.     mb.add(fileMenu);  
  29.     mb.add(editMenu);  
  30.     mb.add(geshiMenu);  
  31.     mb.add(helpMenu);  
  32.     fileMenu.add(jmiNew=new JMenuItem("新建"));  
  33.     fileMenu.add(jmiOpen=new JMenuItem("打开"));  
  34.     fileMenu.add(jmiSave=new JMenuItem("保存"));  
  35.     fileMenu.addSeparator();                                 //加入分割线  
  36.     fileMenu.add(jmiExit=new JMenuItem("退出"));  
  37.       
  38.     editMenu.add(jmiCut=new JMenuItem("剪切 "));  
  39.     editMenu.add(jmiCopy=new JMenuItem("复制  "));  
  40.     editMenu.add(jmiPaste=new JMenuItem("粘贴  "));  
  41.     editMenu.add(jmifind=new JMenuItem("查找"));  
  42.     editMenu.add(jmirepalace=new JMenuItem("替代"));  
  43.     editMenu.addSeparator();  
  44.     editMenu.add(jmialldo=new JMenuItem("全选 "));  
  45.       
  46.     helpMenu.add(jmiAbout=new JMenuItem("关于记事本"));  
  47.       
  48.     jmiNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK));  //设置快捷  
  49.     jmiOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));  
  50.     jmiSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));  
  51.     jmiExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,ActionEvent.CTRL_MASK));  
  52.     jmifind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,ActionEvent.CTRL_MASK));  
  53.     jmirepalace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,ActionEvent.CTRL_MASK));  
  54.     jmiCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK));  
  55.     jmialldo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.CTRL_MASK));  
  56.     jmiCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));  
  57.     jmiPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK));  
  58.       
  59.       
  60.     chooser.setCurrentDirectory(new File("."));   //设置对话框的路径      
  61.     add(new JScrollPane(jta),BorderLayout.CENTER);  
  62.     add(jlbStatus,BorderLayout.PAGE_END);  
  63.                                          //注册事件  
  64.     jmiOpen.addActionListener(this);     // 打开  
  65.     jmiNew.addActionListener(this);//           保存  
  66.     jmiSave.addActionListener(this);//           保存  
  67.     jmiAbout.addActionListener(this);//         关于  
  68.     jmiExit.addActionListener(this); //          退出  
  69.     jmialldo.addActionListener(this);//     全选  
  70.     jmiCut.addActionListener(this);  //     剪切  
  71.     jmiCopy.addActionListener(this);  //复制  
  72.     jmirepalace.addActionListener(this);  //替代  
  73.     jmiPaste.addActionListener(this);//粘贴  
  74.     jmifind.addActionListener(this);  
  75.     setSize(600,400);  
  76.     setLocationRelativeTo(null);  
  77.     setVisible(true);  
  78.     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  79. }  
  80. public void actionPerformed(ActionEvent e) {            //设置执行事件  
  81.     if(e.getSource()==jmiOpen) {  
  82.         open();       
  83.     }else if(e.getSource()==jmiSave) {  
  84.         save();  
  85.     }else if(e.getSource()==jmiNew) {  
  86.         renew();  
  87.     }else if(e.getSource()==jmialldo) {  
  88.         jta.selectAll();  
  89.     }else if(e.getSource()==jmiCut) {  
  90.         jta.cut();  
  91.     }else if(e.getSource()==jmiPaste) {  
  92.         jta.paste();  
  93.     }else if(e.getSource()==jmiCopy) {  
  94.         jta.copy();  
  95.     }else if(e.getSource()==jmifind) {  
  96.          find();  
  97.     }else if(e.getSource()==buttonzao) {  
  98.         zao();  
  99.     }else if(e.getSource()==jmirepalace) {  
  100.         tida();                    
  101.     }else if(e.getSource()==butttidai) {  
  102.         tidaiwenben();  
  103.     }else if(e.getSource()==jmiAbout)  
  104.         JOptionPane.showMessageDialog(this"用java语言开放的记事本程序","关于记事本",JOptionPane.INFORMATION_MESSAGE);  
  105.     else if(e.getSource()==jmiExit)  
  106.         System.exit(0);  
  107. }  
  108.   
  109.   
  110. private void tidaiwenben() {  
  111.     String s=ca.getText();              //提取ca输入框内容  
  112.     String ss=tad.getText();              //提取tab输入框内容  
  113.     x = jta.getText().indexOf(s,x+1);  
  114.     if (x == -1) {  
  115.         JOptionPane.showConfirmDialog(null"没找到: " + s,"查找结果",JOptionPane.CANCEL_OPTION);  
  116.     } else {  
  117.         jta.setSelectionStart(x);  
  118.         jta.setSelectionEnd(x + s.length());  
  119.         jta.replaceSelection(ss);  
  120.     }         
  121. }  
  122.   
  123.   
  124. private void tida() {  
  125.     JFrame frame=new JFrame("逐个替代");  
  126.     JPanel j1=new JPanel();  
  127.     JPanel j2=new JPanel();  
  128.     frame.setSize(300120);   
  129.     butttidai=new JButton("确定");   
  130.     j1.add(ca=new JTextField(12),BorderLayout.LINE_START);  
  131.     j1.add(tidai,BorderLayout.CENTER);  
  132.     j1.add(tad=new JTextField(12),BorderLayout.AFTER_LINE_ENDS);  
  133.     j1.add(butttidai);  
  134.     frame.add(j1);  
  135.       
  136.     butttidai.addActionListener(this);  
  137.     frame.setVisible(true);  
  138.     frame.setLocationRelativeTo(null);            
  139. }  
  140.   
  141.   
  142. int x=-1;  
  143. private void zao() {  
  144.       
  145.     String s=ca.getText();              //提取输入框内容  
  146.     x = jta.getText().indexOf(s,x+1);  
  147.     if (x == -1) {  
  148.         JOptionPane.showConfirmDialog(null"没找到: " + s,"查找结果",JOptionPane.CANCEL_OPTION);  
  149.     } else {  
  150.         jta.setSelectionStart(x);  
  151.         jta.setSelectionEnd(x + s.length());          
  152.     }     
  153. }  
  154.   
  155.   
  156.   
  157. private void find() {  
  158.     JFrame frame=new JFrame("查找");  
  159.     JPanel j1=new JPanel();  
  160.     frame.setSize(300100);   
  161.     buttonzao=new JButton("查找");   
  162.     j1.add(ca=new JTextField(12));  
  163.     j1.add(buttonzao);  
  164.     frame.add(j1);  
  165.     buttonzao.addActionListener(this);  
  166.     frame.setVisible(true);  
  167.     frame.setLocationRelativeTo(null);    
  168. }  
  169.   
  170.   
  171.   
  172.   
  173. private void renew() {  
  174.     JFrame frame=new JFrame("新建记事本");  
  175.     JPanel panel1=new JPanel();  
  176.     JLabel renew1=new JLabel("是否保存文件?",JLabel.CENTER);  
  177.     JButton shi=new JButton("保存");  
  178.     JButton fou=new JButton("不保存");  
  179.     shi.addActionListener(new ActionListener() {  
  180.         public void actionPerformed(ActionEvent e) {  
  181.             save();  
  182.             jta.setText("");  
  183.             frame.dispose();  
  184.               
  185.         }  
  186.     });  
  187.     fou.addActionListener(new ActionListener() {  
  188.         public void actionPerformed(ActionEvent e) {  
  189.             jta.setText("");  
  190.             frame.dispose();  
  191.             jlbStatus.setText("文件放弃保存");  
  192.             //jta.add(jlbStatus,BorderLayout.PAGE_END);  
  193.         }  
  194.     });   
  195.       
  196.     frame.setSize(300100);   
  197.     panel1.add(shi);  
  198.     panel1.add(fou);  
  199.     frame.add(renew1,BorderLayout.CENTER);  
  200.     frame.add(panel1,BorderLayout.PAGE_END);  
  201.     frame.setVisible(true);  
  202.     frame.setLocationRelativeTo(null);    
  203. }  
  204.   
  205. private void open() {                //打开文件的方法  
  206.     if(chooser.showOpenDialog(this)==JFileChooser.APPROVE_OPTION) {  
  207.         File file=chooser.getSelectedFile();   //设置选择到的文件  
  208.         try {  
  209.             BufferedInputStream in=new BufferedInputStream(new FileInputStream(file));    //设置输入流  
  210.             byte[]b=new byte[in.available()];       //返回从该输入流中可以读取的字节数的估计值  
  211.             in.read(b,0,b.length);//read(byte[] b, int off, int len) 从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。  
  212.             jta.append(new String (b,0,b.length));  //   将给定的文本附加到文档的末尾。  
  213.             in.close();  
  214.             jlbStatus.setText("打开文件"+file.getName());   
  215.             this.setTitle(file.toString()+"-记事本");  
  216.               
  217.         }catch(IOException ex) {  
  218.             jlbStatus.setText("打开文件错误:"+file.getName());  
  219.         }  
  220.     }  
  221. }  
  222. private void save() {  
  223.     if(chooser.showSaveDialog(this)==JFileChooser.APPROVE_OPTION) {  
  224.         File file=chooser.getSelectedFile();  
  225.         try {  
  226.             BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(file));  
  227.             byte[]b=(jta.getText()).getBytes();  
  228.             out.write(b,0,b.length);  
  229.             out.close();  
  230.             jlbStatus.setText("文件已经保存:"+file.getName());          
  231.         }  
  232.         catch(IOException ex) {  
  233.             jlbStatus.setText("保存文件错误:"+file.getName());      
  234.         }  
  235.     }  
  236. }  
  237. public static void main(String[] args) {  
  238.     try {  
  239.         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());          
  240.     }   catch(Exception e) {}  
  241.         SwingUtilities.invokeLater(new Runnable() {  
  242.             public void run() {  
  243.                 new NotePadDemo();  
  244.             }  
  245.             });  
  246.     }  
  247.  }        
  248.   
  249.   
  250.       
  251.       

运行:




总结:光标的操作一开始不清楚,查看了资料才知道怎么使用。另外,发现虚拟类中的变量不可以进行更改(加减乘除)?或许是我操作的问题,造成不小的麻烦~


内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值