承接第一部分的 UI 初始化,本篇實作記事本的核心功能:檔案管理(新建、開啟、儲存、另存、關閉)、編輯操作(剪下、複製、貼上、刪除、全選)、尋找下一個 以及 插入時間/日期。
bsaved布林變數 bsaved 追蹤內容是否已儲存:true 表示無異動,false 表示有未存變更。所有修改內容的操作(輸入、貼上、刪除、剪下)均將其設為 false。
FileNew()void FileNew() {
if (bsaved) {
jTextArea1.setText("");
jTextArea1.setFocusable(true);
setTitle("未命名");
statubar.setText("新建文本");
} else {
FileSaveTo(); // 提示儲存後再新建
}
}
FileOpen()使用 JFileChooser 選擇檔案,以 FileReader 讀取字元陣列並設定至文字區:
File file = new File(strFileOpen);
int flength = (int) file.length();
char[] data = new char[flength];
FileReader fr = new FileReader(file);
int num = 0;
while (fr.ready()) {
num += fr.read(data, num, flength - num);
}
fr.close();
jTextArea1.setText(new String(data, 0, num));
讀取成功後更新 filename、視窗標題、狀態列,並將 bsaved = false。
FileSave() / FileSaveTo()FileSave():若 filename 為 null 則轉呼叫 FileSaveTo();否則以 FileWriter 寫入。FileSaveTo():顯示儲存對話框取得路徑,再呼叫 FileSave()。寫入成功後設定 bsaved = true 並呼叫 updateFname() 更新標題(未儲存時標題前綴「記事本」)。
FileClose()若有未存變更,彈出確認對話框(JOptionPane.YES_NO_CANCEL_OPTION):
FileSave()System.exit(0))透過 java.awt.datatransfer 套件實作:
StringSelection → 設定至系統剪貼簿(cb.setContents()) → 以 replaceRange("", start, end) 移除選取區。Transferable → 擷取 DataFlavor.stringFlavor → replaceRange() 插入游標位置。replaceRange("", start, end)。FileFindNext():實例化 Frame1(尋找/替換對話框,見第三部分)。FileTime():使用 SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 格式化當前時間,append() 至文字區末尾。mouseReleased() 檢測 isPopupTrigger(),在游標位置顯示 JPopupMenu pm(含剪下、複製、貼上、刪除)。
此部分完整呈現了文字編輯器的檔案生命週期管理、剪貼簿整合與基本編輯功能,程式碼結構清晰,適合作為 Swing 檔案操作的教學範例。