zoukankan      html  css  js  c++  java
  • JavaSE 基于AWT的记事本实现

    {功能描述}
    NoteBook 类是一个记事本的基本类,该类的对象具有记事本的基本功能,包括:
    打开文件、保存文件以及文本的复制、粘贴、删除等。
    该程序主要包括为窗口添加菜单栏、在菜单栏中添加菜单以及为菜单栏添加菜单项,并且为每一个菜单项添加相应的监听器完成相应的操作。另外,还包括文件内容的读取和保存。

    {相关代码}

    package sup.orange.learn;
    
    import java.awt.*;
    import java.awt.datatransfer.Clipboard;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.StringSelection;
    import java.awt.datatransfer.Transferable;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    /**
     * Created by re-x on 11/3/14.
     */
    public class NoteBook extends Frame implements ActionListener{
        MenuBar menuBar = new MenuBar();
    
        TextArea textArea = new TextArea();
    
        // file menu
        Menu fileMenu = new Menu("File");
        MenuItem newItem = new MenuItem("New");
        MenuItem openItem = new MenuItem("Open");
        MenuItem saveItem = new MenuItem("Save");
        MenuItem saveAsItem = new MenuItem("Save As");
        MenuItem exitItem = new MenuItem("Exit");
    
        // edit menu
        Menu editMenu = new Menu("Edit");
        MenuItem selectItem = new MenuItem("Select All");
        MenuItem copyItem = new MenuItem("Copy");
        MenuItem cutItem = new MenuItem("Cut");
        MenuItem pasteItem = new MenuItem("Paste");
    
        String fileName = "NoName.txt";
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Clipboard clipboard = toolkit.getSystemClipboard();
    
    
        // create and init open file dialog && save file dialog
        private FileDialog openFileDialog = new FileDialog(this, "Open File", FileDialog.LOAD);
        private FileDialog saveAsFileDialog = new FileDialog(this, "Save As", FileDialog.SAVE);
    
        public NoteBook() {
            setTitle("NotePad");
            setFont(new Font("Times New Roman", Font.PLAIN, 12));
            setBackground(Color.gray);
            setSize(600, 400);
    
            fileMenu.add(newItem);
            fileMenu.add(openItem);
            fileMenu.addSeparator();
            fileMenu.add(saveItem);
            fileMenu.add(saveAsItem);
            fileMenu.addSeparator();
            fileMenu.add(exitItem);
    
            editMenu.add(selectItem);
            editMenu.addSeparator();
            editMenu.add(copyItem);
            editMenu.add(cutItem);
            editMenu.add(pasteItem);
    
            menuBar.add(fileMenu);
            menuBar.add(editMenu);
    
            setMenuBar(menuBar);
            add(textArea);
    
            addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    super.windowClosing(e);
                    dispose();
                    System.exit(0);
                }
            });
    
            newItem.addActionListener(this);
            openItem.addActionListener(this);
            saveItem.addActionListener(this);
            saveAsItem.addActionListener(this);
            exitItem.addActionListener(this);
    
            selectItem.addActionListener(this);
            copyItem.addActionListener(this);
            cutItem.addActionListener(this);
            pasteItem.addActionListener(this);
    
        }
    
        public static void main(String[] args) {
            Frame frame = new NoteBook();
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); // get screen size
            Dimension frameSize = frame.getSize();  // get frame size
    
            if (frameSize.height > screenSize.height) {
                frameSize.height = screenSize.height;
            }
            if (frameSize.width > screenSize.width) {
                frameSize.width = screenSize.width;
            }
    
            frame.setLocation((screenSize.width-frameSize.width)/2, (screenSize.height-frameSize.height)/2);
            frame.setVisible(true);
        }
    
        public void actionPerformed(ActionEvent e) {
            Object eventSource = e.getSource();
    
            // judge which menuItem is the source
            if (eventSource == newItem) {
                textArea.setText("");
            }
            else if (eventSource == openItem) {
                openFileDialog.setVisible(true);
                fileName = openFileDialog.getDirectory()+openFileDialog.getFile();
                if (fileName != null) {
                    readFile(fileName);
                }
            }
            else if (eventSource == saveItem) {
                if (fileName != null) {
                    writeFile(fileName);
                }
            }
            else if (eventSource == saveAsItem) {
                saveAsFileDialog.setVisible(true);
                fileName = saveAsFileDialog.getDirectory()+saveAsFileDialog.getFile();
                if (fileName != null) {
                    writeFile(fileName);
                }
            }
            else if (eventSource == selectItem) {
                textArea.selectAll();
            }
            else if (eventSource == copyItem) {
                String text = textArea.getSelectedText();
                StringSelection selection = new StringSelection(text);
                clipboard.setContents(selection, null);
            }
            else if (eventSource == cutItem) {
                String text = textArea.getSelectedText();
                StringSelection selection = new StringSelection(text);
                clipboard.setContents(selection, null);
                textArea.replaceRange("", textArea.getSelectionStart(), textArea.getSelectionEnd());
            }
            else if (eventSource == pasteItem) {
                Transferable contents = clipboard.getContents(this);
                if (contents == null) {
                    return;
                }
                String text = "";
                try {
                    text = (String)contents.getTransferData(DataFlavor.stringFlavor);
                }
                catch (Exception ex) {
                    ex.printStackTrace();
                }
    
                textArea.replaceRange(text, textArea.getSelectionStart(), textArea.getSelectionEnd());
            }
            else if (eventSource == exitItem) {
                System.exit(0);
            }
        }
    
        public void readFile(String fileName) {
            try {
                File file = new File(fileName);
                FileReader readIn = new FileReader(file);
                int size = (int)file.length();
                int charsRead = 0;
                char [] content = new char[size];
    
                while (readIn.ready()) {
                    charsRead += readIn.read(content, charsRead, size-charsRead);
                }
                readIn.close();
                textArea.setText(new String(content, 0, charsRead));
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public void writeFile(String fileName) {
            try {
                File file = new File(fileName);
                FileWriter writeOut = new FileWriter(file);
                writeOut.write(textArea.getText());
                writeOut.close();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    xhEditor入门基础
    【Scala-ML】使用Scala构建机器学习工作流
    POJ 2482 Stars in Your Window(线段树)
    Xcode6 UIWebView与JavaScript交互(issue fix)
    poj1159--Palindrome(dp:最长公共子序列变形 + 滚动数组)
    把握linux内核设计思想(十二):内存管理之slab分配器
    Andriod DiskLruCache的使用案例
    Lambda 表达式的演示样例-来源(MSDN)
    HDU 4857 topological_sort
    Thinking in React(翻译)
  • 原文地址:https://www.cnblogs.com/aqing1987/p/4292599.html
Copyright © 2011-2022 走看看