Java Swing实现具有基本功能的记事本
目前实现了:
文件
新建
打开
保存
退出前保存询问
编辑
剪切
复制
粘贴
清除
撤销
格式
字体选择
字体颜色选择
帮助
关于 (样式采用了css与html来描绘)
工具栏
图标形式的:
保存
复制
粘贴
剪切
文字加粗
文字斜体
底部状态栏
文本字数实时统计
日期显示
编码显示(其实是假的哈哈)
右键弹出菜单
复制
粘贴
剪切
工具栏和右键弹出菜单共享了一些图标,特别地,右键弹出菜单使用了鼠标监听器来实时报告鼠标的坐标,从而绘制弹出菜单。
图标我已经打包了,只要解压到源文件同一个目录下就行。
下载好的Project可以直接用IntelliJ IDEA导入
其中比较有意思的是,我模仿了一些笔记本应用,在文本区没有文字的时候将对应的功能项或图标设置成不可用,也就是灰色状态,直到键入了文本。粗体与斜体之间的可用性影响也写了个逻辑判断函数。
部分核心实现是搬运别人的代码,但是有点杂。。。。大部分框架是自己写的。
注:监听器注册使用了Lambda表达式,看起来更简洁
程序由三个文件组成:
Launcher.java 主方法
MyFrame.java 框架实现
AboutDialog.java 单独用一个文件写「关于」对话框
主界面预览:
废话不多说,show the code:
Launcher.java :
public class Launcher{
public static void main(String[] args){
new MyFrame("Untitled");
}
}
MyFrame.java :
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.undo.UndoManager;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
...................
Created by HengyiYu
...................
*/
class MyFrame extends JFrame {
private static final int DEFAULT_WIDTH = 700; // 窗口默认宽度
private static final int DEFAULT_HEIGHT = 450; // 窗口默认高度
private static final int DEFAULT_FONTSIZE = 20; // 默认字体大小
private JTextArea tv_area = null; // 多行文本框
private JScrollPane s_pane = null; // 带滚动条的面板
private JMenuBar mb = null; // 菜单栏
private JToolBar toolBar1 = null; // 顶部工具栏
private JToolBar toolBar2 = null; // 底部status栏
private JMenu m_file = null; // 文件菜单
private JMenu m_edit = null; // 编辑菜单
private JMenu m_format = null; // 格式菜单
private JMenu m_help = null; // 帮助菜单
private JPopupMenu popupMenu = null; // 右键弹出式菜单
private Icon toolBar_Save = null; // 工具栏保存图标
private Icon toolBar_Cut = null; // 工具栏剪切图标
private Icon toolBar_Copy = null; // 工具栏复制图标
private Icon toolBar_Paste = null; // 工具栏粘贴图标
private Icon statusBar_status = null; // 状态栏图标
private Icon toolBar_more_font = null; // 工具栏字体图标
private Icon m_help_icon = null; // 关于菜单项图标
private JFileChooser chooser = null; // 文件选择对象
private File file = null; // 文件对象
private UndoManager manager = null; // 撤销操作管理对象
private String codestyle = "UTF-8"; // 编码格式
/*----------------文件菜单项---------------------*/
private JMenuItem file_new = null; // 新建
private JMenuItem file_open = null; // 打开
private JMenuItem file_save = null; // 保存
private JMenuItem file_exit = null; // 退出
/*----------------文件菜单项---------------------*/
/*----------------编辑菜单项---------------------*/
private JMenuItem edit_cut = null; // 剪切
private JMenuItem edit_copy = null; // 复制
private JMenuItem edit_paste = null; // 粘贴
private JMenuItem edit_clear = null; // 清空当前内容
private JMenuItem edit_undo = null; // 撤销
/*----------------编辑菜单项---------------------*/
/*----------------格式菜单项---------------------*/
private JMenuItem format_chooseFontColor = null; // 选择字体颜色
private JMenuItem format_chooseFont = null; // 选择字体
/*----------------格式菜单项---------------------*/
/*----------------帮助菜单项---------------------*/
private JMenuItem help_about = null; // 关于
/*----------------帮助菜单项---------------------*/
/*----------------工具栏项目---------------------*/
private JButton button_save = null;
private JButton button_copy = null;
private JButton button_paste = null;
private JButton button_cut = null;
private JLabel moreOption = null;
private JCheckBox check_bold = null; // 加粗选项
private JCheckBox check_italic = null; // 斜体选项
/*----------------工具栏项目---------------------*/
/*----------------弹出菜单项---------------------*/
private JMenuItem popCut = null;
private JMenuItem popCopy = null;
private JMenu