首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 記事本實現:菜單、工具欄、查找替換、撤銷機制待完善

     編輯:Java 相關知識

本文展示一個基於 Swing 的記事本完整源碼,實現了新建、打開、保存、另存為、編輯 (剪切/複製/粘貼/刪除/全選)、查找/替換、日期時間插入、自動換行、字體/顏色選擇、右鍵彈出菜單、狀態欄顯示等功能。唯一缺憾是「撤銷/重做」功能尚未實現,文末給出實現思路供參考。

核心架構

  • 主框架:JFrame + BorderLayout,頂部 JMenuBar,中部 JScrollPane(JTextArea),底部 JLabel 狀態欄。
  • 菜單體系:文件、編輯、格式、幫助四大主菜單 + 右鍵 JPopupMenu,所有 JMenuItem 綁定快捷鍵 (Ctrl+N/O/S/Q, Ctrl+Z/X/C/V 等) 並採用 ActionListener 適配器模式分發事件。
  • 文件操作:JFileChooser 選擇路徑,FileReader/Writer 讀寫文本,dirty 標記跟蹤內容是否修改。
  • 查找/替換:模態對話框 FindDlg/ReplaceDlg 獲取關鍵字,JTextArea 文本範圍搜索與替換邏輯。
  • 格式控制:JTextArea.setLineWrap()、JFontChooser (自定義)、JColorChooser 修改字體顏色。

關鍵代碼片段

主構造器 (節選)

public class Jsb {
    boolean dirty = false; String filename = "";
    JFrame frame = new JFrame("我的記事本");
    JTextArea text = new JTextArea();
    JMenuBar Mbar = new JMenuBar();
    // ... 菜單項聲明 ...

    public Jsb() {
        // 佈局、菜單構建、事件綁定、顯示
        frame.setSize(600, 500);
        frame.setJMenuBar(Mbar);
        // 文件菜單
        JMenuItem jnew = new JMenuItem("新建(N)");
        jnew.setAccelerator(KeyStroke.getKeyStroke('N', Event.CTRL_MASK));
        jnew.addActionListener(e -> newtext());
        // ... 其他菜單項類似 ...

        text.addCaretListener(e -> dirty = true);
        text.addMouseListener(e -> {
            if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0)
                pop.show((Component)e.getSource(), e.getX(), e.getY());
        });
        frame.setVisible(true);
    }
    // 業務方法: newtext(), opentext(), save(), saveas(), close(),
    // cut(), copy(), paste(), delete(), find(), replace(), undo() 等
}

撤銷/重做實現思路 (待補全)

Swing 提供 javax.swing.undo.UndoManager 配合 Document 事件實現:

UndoManager undoMgr = new UndoManager();
text.getDocument().addUndoableEditListener(e -> undoMgr.addEdit(e.getEdit()));

// 菜單項動作
jundo.addActionListener(e -> {
    if (undoMgr.canUndo()) undoMgr.undo();
});
jredo.addActionListener(e -> {
    if (undoMgr.canRedo()) undoMgr.redo();
});

需注意:UndoManager 默認合併連續輸入,可通過 setLimit() 控制歷史深度;大文本建議定期清理或使用 CompoundEdit 分組。

運行與擴展

  • 編譯運行 Jsb 類即可啟動。
  • 可擴展:行號顯示、語法高亮 (RSyntaxTextArea)、多標籤頁、最近文件列表、自動保存、編碼選擇 (UTF-8/GBK)。

完整源碼已在原文給出,可直接複製作為課程設計或二次開發基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved