Java基礎:圖形化記事本程序

2021-02-24 958小站

題目:編寫一個筆記本程序

要求:1.要有圖形化界面

          2.能實現編輯、保存、修改、添加功能

          3.使用文字輸入流

分析:

    1.這個筆記本程序只能是我們個人的,所以得設置一個登錄程序,可不能讓其他人發現我們的小秘密

    2.得有圖形化界面,就要用到JFrame

    3.設計文件的讀寫,就要用到文件的操作File,和數據流的操作

    4.文件的存儲我們以可以自定義文件名稱,然後創建對應的文件,並向裡面寫入我們需要保存的內容

開始編寫代碼:

大概分析了一波我們需要用到的技術點,現在我們就可以開始寫一點代碼了

首先我們需要做一個登錄界面,輸入登錄用戶名和密碼後和我們預先設好的用戶名和密碼做比較,輸入正確就打開筆記本列表,不正確則提示密碼或用戶名錯誤

/**     * 登錄界面     * @param panel     * @param jFrame     */    private static void initLogin(JPanel panel,JFrame jFrame) {
//布局 panel.setLayout(null);
// 創建 JLabel 標籤 用戶名 JLabel userLabel = new JLabel("用戶名:"); //定義組件位置 x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小 userLabel.setBounds(10,20,80,25); panel.add(userLabel);
//創建輸入框組件 用戶名文本域 JTextField userText = new JTextField(20); userText.setBounds(100,20,165,25); panel.add(userText);
// 創建 JLabel 標籤 密碼 JLabel passwordLabel = new JLabel("密碼:"); passwordLabel.setBounds(10,50,80,25); panel.add(passwordLabel);
//創建輸入框組件 輸入密碼的文本域 這個類輸入的信息會以點號代替,用於包含密碼的安全性 JPasswordField passwordText = new JPasswordField(20); passwordText.setBounds(100,50,165,25); panel.add(passwordText);
// 創建登錄按鈕 JButton loginButton = new JButton("登錄"); loginButton.setBounds(120,100,80,25); panel.add(loginButton);
//為按鈕添加點擊事件,點擊後判斷用戶名和密碼正確性 loginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String userName = userText.getText(); String password = String.valueOf(passwordText.getPassword()); if ("admin".equals(userName) && "123456".equals(password)){ jFrame.dispose(); //接著做後續操作 System.out.println("登錄成功"); //查詢文件列表 List<String> fileNameList = queryFile(); initNotbookList(fileNameList); }else{ //用戶密碼不對 tip("登錄用戶或密碼不正確"); } } }); }

對了,還有個消息提示的方法(提示的方法是統一的,提示的內容可以根於具體的需要傳入即可),一個 提示框可以添加一些用戶的友好交互性

    /**     * 提示信息彈窗     * @param msg     */    private static void tip(String msg){        JFrame tipFrame = new JFrame("提示");
tipFrame.setSize(220,100); //設置窗口生出位置 tipFrame.setLocationRelativeTo(null);
JLabel tipLabel = new JLabel(msg); tipLabel.setForeground(Color.red);
tipFrame.add(tipLabel); tipFrame.setVisible(true); }

這裡會遇到一個問題:多個窗口的顯示與關閉,只要第一個窗口設置關閉事件,其他窗口不設置就行

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

好了!登錄寫好了,我們接著登錄以後的事情了!登錄成功後要跳轉到文件列表像是已經存在的筆記本文件,這裡得用到文件夾的讀取,以及獲取該文件夾下文件名稱列表,廢話不多說,上代碼

    /**     * 查詢文件夾下已存在的文件     * FilePath 為文件路徑,之前已設置為全局變量     * @return     */    private static List<String> queryFile(){        File file = new File(FilePath);        //判斷文件夾是否存在,不存在就先創建        if (!file.exists() || !file.isDirectory()){            //mkdir() :  創建此抽象路徑名指定的目錄。            //mkdirs() :  創建此抽象路徑名指定的目錄,包括創建必需但不存在的父目錄。            file.mkdir();        }
// 讀取目錄下的所有目錄文件信息 String[] files = file.list(); return Arrays.asList(files); }

將獲取到文件列表利用循環和swing的按鈕JButton以按鈕的形式在圖形化界面上展示,之後做內容的顯示以及修改可以以按鈕的形式進行

/**     * 初始化記事本列表     * @param fileName     */    private static void initNotbookList(List<String> fileName){        // 創建 JFrame 實例        JFrame frame = new JFrame("筆記列表(點擊進入修改)");        // Setting the width and height of frame        //設置窗口大小        frame.setSize(320, 200);        //設置窗口生出位置        frame.setLocationRelativeTo(null);        //添加關閉動作        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        //創建JPanel 畫布實例        JPanel panel = new JPanel();
for (String name : fileName) { // 創建筆記列表按鈕 JButton fileButton = new JButton(name); fileButton.setBounds(120,100,80,25); panel.add(fileButton); frame.add(panel);
fileButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {                    //讀入文件方法 } }); }
        //這裡在添加兩個按鈕(一個添加的按鈕和退出的按鈕) // 設置添加按鈕 JButton addButton = new JButton("+"); addButton.setBounds(120,100,80,25); panel.add(addButton); frame.add(panel); addButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { initNotbookMain("",""); } });

// 設置退出按鈕 JButton exitButton = new JButton("退出"); exitButton.setBounds(120,100,80,25); panel.add(exitButton); frame.add(panel); exitButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } });
// 設置界面可見 frame.setVisible(true);    }

程序取出後在圖形化界面上顯示

現在我們寫好了展示部分!接下來就是文件以及文件內容的存儲和回顯了;

照例,我們先弄個編輯頁面,代碼走著

        private static void initNotbookMain(String fileName,String fileContent){                JFrame frame = new JFrame("筆記內容");                        frame.setSize(280, 450);                frame.setLocationRelativeTo(null);                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                JPanel panel = new JPanel();

JLabel notbookTitle = new JLabel("標題:"); notbookTitle.setBounds(10,50,80,25); panel.add(notbookTitle);
JTextField notbookTitleText = new JTextField(20); notbookTitleText.setBounds(100,20,165,25); if (!"".equals(fileName)){ String name = fileName.substring(0,fileName.indexOf(".")); notbookTitleText.setText(name); } panel.add(notbookTitleText);
JLabel content = new JLabel("內容:"); content.setBounds(10,100,80,25); panel.add(content);
JTextArea contentText = new JTextArea(20,20); contentText.setLineWrap(true); panel.add(contentText); if(!"".equals(fileContent)){ contentText.setText(fileContent); }
JButton saveButton = new JButton("保存"); saveButton.setBounds(120,100,80,25); panel.add(saveButton);
JButton returnButton = new JButton("返回"); returnButton.setBounds(120,100,80,25); panel.add(returnButton); frame.add(panel);
saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { saveWorld(notbookTitleText.getText(), contentText.getText()); } }); returnButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { frame.dispose(); List<String> fileList = queryFile(); initNotbookList(fileList); } }); frame.setVisible(true);    }

   還有一個保存方法

    /**     * 文件保存     * @param fileName     * @param content     */    private static void saveWorld(String fileName,String content){        //讀取文件        File file=new File(FilePath + fileName+".txt");        //判斷文件是否存在        if (!file.exists()){            //如果不存在就嘗試創建            try {                file.createNewFile();            } catch (IOException e) {                e.printStackTrace();            }        }        try {            OutputStream os = new FileOutputStream(file);            PrintWriter pw=new PrintWriter(os);            pw.println(content);            pw.close();            tip("內容保存成功");        }catch (Exception e){            System.out.println("寫入錯誤");            tip("內容保存失敗");        }    }

返回列表也有了

這麼一來,我們就是可以寫東西保存了,打開文件夾看下是否有了

接著來修改的,之前我們做了文件的顯示,並且用了按鈕來實現,在每個按鈕的點擊事件上加上文件的讀取方法,再將文件回填到界面即可,修改一律調用保存的方法,照例,上代碼

fileButton.addActionListener(new ActionListener() {    @Override    public void actionPerformed(ActionEvent e) {        frame.dispose();        //用來接收的字符串        StringBuilder result = new StringBuilder();        //獲取文件內容        try {
//構造一個BufferedReader類來讀取文件 BufferedReader br = new BufferedReader(new FileReader(new File(FilePath + name))); String s = null; //使用readLine方法,一次讀一行 while((s = br.readLine())!=null){ result.append(System.lineSeparator()+s); } br.close(); }catch (Exception e1){ System.out.println("文件讀取錯誤"); } frame.dispose(); initNotbookMain(name,result.toString()); }});

相關焦點

  • 微電影 | 記事本
    一本紅色的記事本,記錄了兩代人幾十年的漫漫稅收路.1964年,年輕的助徵員許漢清跟隨老稅幹黃大成奮戰在基層一線,用腳步丈量民情、以腳印踐行初心,走上了風雨無阻的漫漫收稅路。2019年,老稅幹黃大成去世。
  • 甲骨文:有史以來最偉大的25個Java應用程式
    12、Java 小程序。根據牛津英語詞典,小程序(applet)一詞最早出現在 1990 年的 PC Magazine(計算機雜誌)上。但是直到 1995 年 Java 出現後,小程序才真正騰飛。Java 小程序可以在網頁(Frame、新窗口、Sun 的 AppletViewer 或測試工具)中啟動,並能運行在於瀏覽器相獨立的 JVM 上。
  • C語言基礎:第一個最簡單程序——Hello World!
    基本功無論在什麼領域內都有著不容忽視的地位,想要學好編程,並將程序運動到實際當中去一定要學好基礎,學好C語言基礎,
  • 廢物利用:記事板
    那麼我們就要一塊記事板把這些計劃啊目標啊記下來,掛在臥室或是客廳裡提示自己。今天小安姐姐就和娃仔們做一個記事板。介紹一下工具1、紅酒盒(木頭的最好,硬紙盒也是可以的)2、砂紙3、刷子4、墨水5、粉筆6、卡紙
  • 小心程序猿的腦洞,笑哭了!
    今年本以為噩夢不會伴隨我,然而……又被程序猿套路了。兩本看標題就不想看的書……更腦洞清奇的是,還內附一張程序猿親自寫的遊戲規則……在規定時間內讀完後,有小米體重秤等東西贈送,遊戲解釋權還歸他自己所有。你以為這是程序猿找了個盒子來搞笑?Naive!程序猿怎麼可能搞這些彎彎繞繞的事情?這是Real傑士邦!單身狗,你可以試試雨天套腳防水喲~
  • 一年級小學生的記錄本你能看懂嗎?
    近日,天津的蔣先生無意間翻開一年級兒子的記事本,一看,一臉懵。記事本裡全是數字+圖案的組合。但兒子講解起裡邊的內容,居然思路清晰,頭頭是道。拼音+數字+圖案=記事本,小朋友的行為實在是很可愛。但是家長還是要好好引導孩子,幫助孩子掌握正確記筆記的方式。從小培養優秀的學習習慣,對孩子的幫助會非常大!把頁面分為三部分,頁面先分為上下兩部分,下部分留幾行寫總結,上部分再分成左右兩列,左邊記關鍵詞,右邊記錄與關鍵詞相對應的內容。
  • 實戰系列:使用Java8 Optional類優雅解決空指針問題
    解決空指針的"銀彈"從Java8開始引入了一個新類 java.util.Optional,這是一個對象的容器,意味著可能包含或者沒有包含一個非空的值。舉個慄子:String str = "hello java8";// output: hello java8Optional.ofNullable(str).ifPresent(System.out::println);String str2 = null;// output: nothingOptional.ofNullable
  • (抗擊疫情 陝西公安戰鬥在一線)「把我的記事板帶來,我給你交接下工作」
    「來醫院時把我的記事板帶來,我給你交接下工作。」陝西省西鹹新區公安局灃東新城分局灃東大道派出所民警王超蒙,在電話裡對接替他工作的同事夏偉叮囑道。2月11日,王超蒙在防疫一線連續工作16天後,被確診為肺癌。
  • 電腦基礎:每位新手都該知道的四個電腦常識!
    有些電腦新手,想掌握電腦,問身邊人總是遭到別人厭煩的態度,所以李哥總結了一些基礎電腦常識給大家。我們每個人都應該了解點電腦入門基礎知識,學習是我們態度,也是我們的權利。廢話不表,直接來看。電腦基礎入門知識一:什麼是電腦配置?如何查看電腦配置?
  • 好消息:FydeOS支持Linux桌面程序運行環境
    此前發布的公測版,FydeOS採用Linux Container的方式融入安卓運行環境,是全球第一款能穩定運行安卓程序的Chromium OS公測版。日前發布的新版本中,FydeOS增加了對 Linux 桌面程序運行環境的支持,用戶可以在FydeOS公測版上同時運行網頁程序、安卓程序和GUI的Linux程序,更接近原生Chrome OS的用戶體驗。
  • python基礎學習教程:Python基礎語法
    在本章中我們將來學習 Python 的基礎語法,讓你快速學會 Python 編程。第一個 Python 程序交互式編程交互式編程不需要創建腳本文件,是通過 Python 解釋器的交互模式進來編寫代碼。讓我們寫一個簡單的 Python 腳本程序。所有 Python 文件將以 .py 為擴展名。將以下的原始碼拷貝至 test.py 文件中。這裡,假設你已經設置了 Python 解釋器 PATH 變量。使用以下命令運行程序:輸出結果:
  • 未越獄iPhone:怎樣安裝App Store裡沒有的程序?
    在安裝了iTunes前提下雙擊打開App文件,就會在「我的應用程式」中出現,如圖所示就是準備安裝的App如果你樂於分享,歡迎關注本公眾號,留言「供稿」即可聯繫小編,謝謝!備註:為了響應讀者的要求,我們後續將不定期推出有關手機的基礎使用教程,大家及時關注推文即可;另外,如果本文對您或者身邊朋友有幫助,請點擊下方的「讚賞」,支持、鼓勵我們的無償服務,感謝一路有你們伴隨我們一起成長!
  • 司法部修改庇護程序
    王律師12月7日Youtube直播觀看連結:https://youtu.be/cckcP43guhM司法部(EOIR)和移民局(USCIS)擬定了關於庇護程序
  • 自學Python筆記:從隨機紅包小程序學界面的使用
    昨天用了半天的完成了下面的小程序,今天分享一下思路。import randomfrom tkinter import *master = Tk()master.title('隨機紅包程序')mainloop() #mainloop 是一個主循環,窗口顯示出來後等待各種消息,比如滑鼠、鍵盤等操作,本小程序只用一個。