English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
After learning Java events, I wrote a very simple notepad. Used MenuBar, Menu, MenuITem controls, events include ActionListener and KeyListener.
The code is as follows:
package com.package3; /* * function: development of a simple notepad, can save files, open files, exit the notepad * author: ywq */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class MenuText { //تحديد العناصر: JFrame f; MenuBar mb; //شريط القوائم Menu mu; //القائمة JTextArea jta; MenuItem openItem, saveItem, closeItem; //القوائم الفرعية FileDialog openDia,saveDia; //نوافذ الحفظ والفتح المنبثقة File file; //مؤلفة public MenuText() { //استدعاء دالة التشغيل التمهيدي init(); } //إجراءات التشغيل التمهيدي للعناصر public void init() { f=new JFrame("مذكرة بسيطة"); mb=new MenuBar(); mu=new Menu("ملف"); openItem=new MenuItem("فتح"); saveItem=new MenuItem("حفظ"); closeItem=new MenuItem("خرج"); jta=new JTextArea(); f.add(jta); //添加 mu.add(openItem); mu.add(saveItem); mu.add(closeItem); mb.add(mu); f.setMenuBar(mb); openDia=new FileDialog(f, "打开", FileDialog.LOAD); saveDia=new FileDialog(f, "保存", FileDialog.SAVE); //设置JFrame属性 f.setBounds(200, 300, 500, 400); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); //调用事件函数 event(); } //事件函数,对事件进行处理 public void event() { { //打开选项 openItem.addActionListener(new ActionListener()) { @Override public void actionPerformed(ActionEvent e) { //调用打开文件的方法 openFile(); } }); //保存选项 saveItem.addActionListener(new ActionListener()) { @Override public void actionPerformed(ActionEvent e) { //调用保存文件的方法。 saveFile(); } }); //添加一个文本区域的事件,即按下Ctrl+S可以保存 //因为键盘监听事件有多种方法,而我们只需要其中的一种,所以可以使用适配器KeyAdapter, //从而只需要实现一种方法即可 jta.addKeyListener(new KeyAdapter()) { //键盘按下方法 public void keyPressed(KeyEvent e){ if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S) { //调用保存文件的方法。 saveFile(); //JOptionPane.showMessageDialog(null, "对啦"); } } }); //关闭选项 closeItem.addActionListener(new ActionListener()) { @Override public void actionPerformed(ActionEvent e) { //退出系统 System.exit(0); } }); } //打开文本的方法 public void openFile() { openDia.setVisible(true); //设置其显示出来 //获取路径和文件名 String dirPath=openDia.getDirectory(); String fileName=openDia.getFile(); //防止点击取消报错 if(dirPath==null || fileName==null) return ; jta.setText(""); //将文本区域清空 file=new File(dirPath,fileName); //建立文件对象 //按照行来读取数据,显示在文本区域 try { BufferedReader br = new BufferedReader(new FileReader(file)); String line = null; while((line=br.readLine())!=null) { jta.append(line+"\r\n"); } br.close(); } catch (IOException ex) { throw new RuntimeException("读取失败"); } } //保存文本的方法。 public void saveFile() { //先判断文件是否存在 if(file==null) { saveDia.setVisible(true); String dirPath = saveDia.getDirectory(); String fileName = saveDia.getFile(); //防止点击取消报错 if(dirPath==null || fileName==null) return ; //因为文件不存在。所以需要建立file对象 file = new File(dirPath,fileName); } //将数据写入文件 try { BufferedWriter bw=new BufferedWriter(new FileWriter(file)); String info=jta.getText(); //得到文本区域的信息 bw.write(info); //写入操作 bw.flush(); bw.close(); } catch (IOException e1) { throw new RuntimeException(); } } public static void main(String[] args) { // ایجاد object new MenuText(); } }
نتیجه اجرا مانند تصویر زیر است:
عملکرد این برنامه شامل:
(1) میتوانید فایل خاصی را باز کنید و میتوانید آن را ویرایش کنید.
(2) میتوانید فایلهای ویراشده را ذخیره کنید.
(3) میتوانید با استفاده از Ctrl+S فایل را ذخیره کنید.
(4) میتوانید با کلیک بر روی closeItem برنامه را ترک کنید.
درعملکرد 3 را انجام دهیددر حالی که، برای منطقه متنی KeyListener اضافه شده است، از Adapter KeyAdapter برای شناسایی استفاده شده است. اما در حال حاضر نیاز به شناسایی ترکیبی است، یعنی Ctrl و S باید فشرده شوند تا عملیات ذخیرهسازی فعال شود.
در مورد شناسایی ترکیبی، Java API روشهای مربوطه را ارائه میدهد.
پدر مستقیم Class KeyEvent یعنی InputEvent Class را پیدا کنید. مانند تصویر زیر:
مетодهای InputEvent Class را بررسی کنید، مانند:
عنصر object از نوع subclasses KeyEvent از InputEvent Class، میتواند مستقیماً روشهای بالا را برای ارزیابی فراخوانی کند. روش isControlDown() برای ارزیابی اینکه کلید ctrl فشرده شده است یا خیر استفاده میشود. به عنوان مثال، اگر در برنامههای if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S) ترکیب ارزیابی را انجام دهیم.
این تمام محتوای این مقاله است، امیدواریم به شما در یادگیری کمک کند، و امیدواریم که همه شما از آموزشهای ناگفته پشتیبانی کنید.
اظهار: محتوای این مقاله از اینترنت است، مالکیت آن به صاحبمنصفه تعلق دارد، محتوای توسط کاربران اینترنت به صورت خودجوش و خودکار بارگذاری شده است، این وبسایت مالکیت ندارد، هیچگونه ویرایش دستی انجام نشده است و هیچ مسئولیتی در قبال آن ندارد. اگر محتوای مشمول حقوق مالکیت فکری را پیدا کردید، خوشحال میشویم که ایمیل خود را به آدرس notice#oldtoolbag.com ارسال کنید (در هنگام ارسال ایمیل، пожалуйста، # را به @ تبدیل کنید) و شواهد مربوطه را ارائه دهید. اگر پس از بررسی واقعی، محتوای مشمول حقوق مالکیت فکری باشد، این وبسایت فوراً محتوای مشمول حقوق مالکیت فکری را حذف خواهد کرد.