V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
SuperMild
V2EX  ›  分享创造

五柳速记(Wuliu-STN)约 100 行代码的快速笔记程序

  •  
  •   SuperMild ·
    ahui2016 · 3 天前 · 867 次点击
    • 约 100 行 Java 代码,只使用 Java 标准库,完全没有第三方代码。
    • 开发时也不使用 Maven, Gradle 之类,只使用 javac
    • 有一个简单的 GUI 窗口。
    • 代码极致简单,不可能更简单了。

    主要功能

    • 开源仓库 https://github.com/ahui2016/Wuliu-STN
    • 下载项目源码后,在终端执行命令 newnote 即可打开窗口,输入文本内容,点击 OK 完成一次记录。
    • 笔记内容是一个个 txt 文件,每天一个,例如 2025-01-01.txt
    • 主要用来记录 零散 的信息,没有条理的、混乱的短句等

    两个优点

    1. 极低心智负担,每次操作就是打开一个文本框,输入内容,点击 OK 。没有别的操作了。
    2. 代码量超少,约 100 行,而且全是很简单很直白的代码,阅读和修改都很轻松。

    不使用 Maven/Gradle, 只使用 javac

    • 全部代码才 11KB, 就算加上 README 之类的文件整个项目不压缩也只有 30KB
    • 只使用 Java 标准库,完全没有第三方代码,修改代码后只需要使用 javac 编译即可,相关的命令我也提供了,具体请看项目 README 。

    一部分代码

    下面是主界面 class Main 的全部代码:

    public class Main implements Runnable {
        private ScrollArea scrollArea;
    
        public static void main(String[] args) {
            MyUtil.checkProjectExists();
            SwingUtilities.invokeLater(new Main());
        }
    
        public void run() {
            // 主窗口
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // 程序标题
            JPanel mainPanel = new JPanel();
            JLabel labelTitle = new JLabel("Wuliu Simple Text Note");
            mainPanel.add(labelTitle);
    
            // 文本框
            scrollArea = new ScrollArea();
            mainPanel.add(scrollArea.scrollPane());
    
            JLabel spacer = new JLabel(" ".repeat(150));
            mainPanel.add(spacer);
            
            // 提交按钮
            JButton okButton = new JButton("OK");
            okButton.addActionListener(new OkButtonListener());
            mainPanel.add(okButton);
    
            frame.add(BorderLayout.CENTER, mainPanel);
            frame.setSize(500, 400);
            frame.setLocationRelativeTo(null); // 窗口居中
            frame.setVisible(true);
        }
    
        // 按钮触发事件:获取文本框内容,生成文件 或 向文件添加内容
        class OkButtonListener implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
                String text = scrollArea.textArea().getText().trim();
                try {
                    MyUtil.createNoteToday(text);
                } catch (IOException ex) {
                    System.err.println("ERROR! ERROR!");
                    throw new RuntimeException(ex);
                }
                System.exit(0);
            }
        }
    }
    

    以上就是主程序的全部代码,另外还有两个文件,比如 MyUtil.java, 汇总一些函数, 以便让主程序看起来简洁。 反正就是代码很少,功能也很简单,但很实用。

    我之前下载过几个主打“简单”的笔记工具(自己也做过几个),但用了一段时间还是觉得不够简单, 因此这次尝试更彻底一点,大做减法,追求更极致的简单。

    3 条回复    2025-01-05 00:07:10 +08:00
    OWLS
        1
    OWLS  
       2 天前
    不要一日一个文件,更喜欢全部都在一个文件。
    SuperMild
        2
    SuperMild  
    OP
       2 天前
    @OWLS 这个很容易改,每个人可以按自己喜欢,按月也行,按年也行,直接修改代码就行。我原本也打算后续加一个功能,允许随时按月合并、按年合并。
    OWLS
        3
    OWLS  
       2 天前
    @SuperMild 很好。支持!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3484 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 11:30 · PVG 19:30 · LAX 03:30 · JFK 06:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.