




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、package notepad;public class JNotepad extends JFrame implements Runnable, ActionListener, MouseListener, CaretListenerprivate static final long serialVersionUID = 1L;private JPanel jContentPane, jStatusPanel;private JScrollPane jScrollNotepadPane;private JMenuBar jMenuBar;private JMenu jMenuFile, jM
2、enuEdit, jMenuFormat, jMenuList;private JMenuItem jMenuNew, jMenuOpen, jMenuSave, jMenuAsSave, jMenuExit, jMenuFont;private JMenuItem jMenuCut, jMenuCopy, jMenuPaste, jMenuSelectAll, jMenuFind, jMenuDate;private JCheckBoxMenuItem jMenuWrap;private JRadioButtonMenuItem jRadioItem;private ButtonGroup
3、group = new ButtonGroup(;private JLabel jLabelFile, jLabelDate, jLabelLines;private JTextArea jNotepad;private JFileChooser fileChooser;private File fileInfo;private Find findText;private SetFont fontText;private StringBuilder sbTitle = new StringBuilder("无 标 题 - 记 事 本 "private StringBuild
4、er sbText = new StringBuilder(;private JMenuBar getJMainBar(if (jMenuBar = nulljMenuBar = new JMenuBar(;jMenuBar.add(getJMenuFile(;jMenuBar.add(getJMenuEdit(;jMenuBar.add(getJMenuFormat(;jMenuList = new JMenu("最近访问的文件 (L"jMenuList.setMnemonic('L'jMenuBar.add(jMenuList;return jMenuB
5、ar;SuppressWarnings("deprecation"private JMenu getJMenuFile(if (jMenuFile = nulljMenuFile = new JMenu("文件 (F"jMenuFile.setMnemonic('F'jMenuNew = new JMenuItem("新建 (N"jMenuNew.setMnemonic('N'jMenuFile.add(jMenuNew.addActionListener(this; jMenuOpen = new J
6、MenuItem("打开 (O"jMenuOpen.setMnemonic('O'jMenuFile.add(jMenuOpen.addActionListener(this; jMenuSave = new JMenuItem("保存 (S"jMenuSave.setMnemonic('S'jMenuSave.setEnabled(false;jMenuFile.add(jMenuSave.addActionListener(this; jMenuAsSave = new JMenuItem("另存为 (A&q
7、uot; jMenuAsSave.setMnemonic('A'jMenuFile.add(jMenuAsSave.addActionListener(this; jMenuFile.addSeparator(;jMenuExit = new JMenuItem("退出 (X"jMenuExit.setMnemonic('X'jMenuFile.add(jMenuExit.addActionListener(this; return jMenuFile;private JMenu getJMenuEdit(if (jMenuEdit = nu
8、lljMenuEdit = new JMenu("编辑 (E"jMenuEdit.setMnemonic('E'jMenuCut = new JMenuItem("剪切 (T"jMenuCut.setMnemonic('T'jMenuEdit.add(jMenuCut.addActionListener(this; jMenuCopy = new JMenuItem("复制 (C"jMenuCopy.setMnemonic('C'jMenuEdit.add(jMenuCopy.addAc
9、tionListener(this; jMenuPaste = new JMenuItem("粘贴 (P"jMenuPaste.setMnemonic('P'jMenuSelectAll = new JMenuItem("全选 (A"jMenuSelectAll.setMnemonic('A'jMenuEdit.add(jMenuSelectAll.addActionListener(this;jMenuEdit.addSeparator(;jMenuFind = new JMenuItem("查找 /替换 (F
10、"jMenuFind.setMnemonic('F'jMenuEdit.add(jMenuFind.addActionListener(this;jMenuEdit.addSeparator(;jMenuDate = new JMenuItem("时间 /日期 (D"jMenuDate.setMnemonic('D'jMenuEdit.add(jMenuDate.addActionListener(this;return jMenuEdit;private JMenu getJMenuFormat(if (jMenuFormat =
11、 nulljMenuFormat = new JMenu("格式 (O"jMenuFormat.setMnemonic('O'jMenuWrap = new JCheckBoxMenuItem("自动换行 (W", true; / jMenuWrap.setState(true;jMenuWrap.setMnemonic('W'jMenuFormat.add(jMenuWrap.addActionListener(this;jMenuFont = new JMenuItem("字体 (F"jMenuFo
12、nt.setMnemonic('F'jMenuFormat.add(jMenuFont.addActionListener(this;return jMenuFormat;private JPanel getJStatusPanel(if (jStatusPanel = nulljLabelFile = new JLabel(" "jLabelDate = new JLabel(" "jLabelLines = new JLabel("总行数 1"GridLayout gridLayout = new GridLayo
13、ut(;gridLayout.setRows(1;jStatusPanel = new JPanel(;jStatusPanel.setLayout(gridLayout;jStatusPanel.add(jLabelDate, null;jStatusPanel.add(jLabelLines, null;return jStatusPanel;private JScrollPane getJScrollNotepadPane(if (jScrollNotepadPane = nulljScrollNotepadPane = new JScrollPane(;jNotepad = new J
14、TextArea(;jNotepad.setLineWrap(true; / 设置自动换行 jNotepad.setWrapStyleWord(true;jNotepad.addCaretListener(this;jScrollNotepadPane.setViewportView(jNotepad; return jScrollNotepadPane;public static void main(String argsJNotepad notepad = new JNotepad(;Thread thread = new Thread(notepad;thread.run(;thread
15、.start(;public JNotepad(this.setJMenuBar(getJMainBar(;this.setContentPane(getJContentPane(;this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE; this.setBounds(100,100, 800, 560;this.setVisible(true;this.addWindowListener(new WindowAdapter( public void windowClosing(WindowEvent e toFileList(false;toFi
16、leList(true;fileChooser = new JFileChooser(; / 创建文件对话框的对象 fileChooser.setSize(400, 300;private JPanel getJContentPane(if (jContentPane = nulljContentPane = new JPanel(;jContentPane.setLayout(new BorderLayout(;jContentPane.add(getJStatusPanel(, BorderLayout.SOUTH; jContentPane.add(getJScrollNotepadPa
17、ne(, BorderLayout.CENTER; return jContentPane;/* 读取或写入最近访问的文件的路径。* param flag:True 表示读取, False 表示写入。*/private void toFileList(boolean flagFile fileList = new File("notepadFileList.txt"tryif(flagif(fileList.exists(String line = null; / null 不能替换为 "" 。FileReader fr = new FileReader
18、(fileList;BufferedReader br = new BufferedReader(fr;while(line = br.readLine( != nulljRadioItem = new JRadioButtonMenuItem(line; group.add(jRadioItem;jMenuList.add(jRadioItem.addMouseListener(this; br.close(;fr.close(;elseif(!fileList.exists(fileList.createNewFile(;FileWriter fw = new FileWriter(fil
19、eList;BufferedWriter bw = new BufferedWriter(fw;for(Component item : jMenuList.getMenuComponents( bw.write(JRadioButtonMenuItemitem.getText(; bw.newLine(;bw.close(;fw.close(;catch(IOException ieie.printStackTrace(;/* 读取选定文件的内容。* param file:选定的文件的对象。*/private void toFileReader(File filetryFileReader
20、fr = new FileReader(fileInfo = file;BufferedReader br = new BufferedReader(fr;jNotepad.read(br, null; / 读取所有字符。br.close(;fr.close(;sbTitle.delete(0, sbTitle.length(;sbTitle.append(fileInfo.getName(;sbTitle.append(" "this.setTitle(null;jMenuSave.setEnabled(true;jNotepad.setCaretPosition(1;
21、/ 更新总行数。catch(IOException ieie.printStackTrace(;/* 写入当前文本的内容。* param file:选定的文件的对象。*/private void toFileWriter(File filetryFileWriter fw = new FileWriter(file;BufferedWriter bw = new BufferedWriter(fw;jNotepad.write(bw; / 逐行写入。bw.close(;fw.close(;catch(IOException ieie.printStackTrace(;public void r
22、un(while(truetryif (this.getTitle(.length( < sbTitle.length(this.setTitle(sbTitle.substring(0, this.getTitle(.length( + 1;elsesbTitle.append(sbTitle.charAt(0;this.setTitle(sbTitle.deleteCharAt(0.toString(;jLabelDate.setText(String.format("%1$tA %1$tB %1$td %1$tY, %1$tp %1$tl:%1$tM:%1$tS"
23、;, new Date(;if(fileInfo != null && fileInfo.exists(sbText.append("文件属性:"if (!fileInfo.canWrite( && fileInfo.isHidden(sbText.append("只读,隐藏 "else if (!fileInfo.canWrite(sbText.append("只读 "else if (fileInfo.isHidden(sbText.append("隐藏 "elsesbText.
24、append("正常 "elsesbText.append("文件不存在 "jLabelFile.setText(sbText.toString(;sbText.delete(0, sbText.length(;Thread.sleep(200;catch (InterruptedException ee.printStackTrace(;public void actionPerformed(ActionEvent eif (e.getSource(.equals(jMenuExitSystem.exit(0;else if (e.getSource(
25、.equals(jMenuNewif(JOptionPane.showConfirmDialog(this, " 当前文本内容以改变,是否新建? ", " 记事本 ", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE = 0sbTitle.delete(0, sbTitle.length(;sbTitle.append("无标题 - 记事本 "this.setTitle(null;else if (e.getSource(.equals(jMenuOpenif(fileC
26、hooser.showOpenDialog(this = JFileChooser.APPROVE_OPTIONtoFileReader(fileChooser.getSelectedFile(;jRadioItem = new JRadioButtonMenuItem(fileInfo.getPath(;group.add(jRadioItem;jMenuList.add(jRadioItem.addMouseListener(this;else if(e.getSource(.equals(jMenuSaveif(fileInfo.canWrite( / 文件属性是否为只读toFileWr
27、iter(fileInfo;elseJOptionPane.showMessageDialog(this, String.format("文件“ %s”的属性为 只读,请先更改其属性。 ", fileInfo.getPath(;else if(e.getSource(.equals(jMenuAsSaveif(fileChooser.showSaveDialog(this = JFileChooser.APPROVE_OPTIONFile file = fileChooser.getSelectedFile(;if(file.exists(if(JOptionPane.sh
28、owConfirmDialog(this, String.format("文件“ %s”已存 在 , 要 替 换 它 吗 ? ", file.getPath(, " 记 事 本 ", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE = 1return;if(!file.canWrite(JOptionPane.showMessageDialog(this, String.format("文件“ %s” 的属性为只读,请先更改其属性。 ", file.getPath(;re
29、turn;toFileWriter(file;else if(e.getSource(.equals(jMenuFindif(findText = nullfindText = new Find(this, jNotepad;findText.setVisible(true;else if(e.getSource(.equals(jMenuFontif(fontText = nullfontText = new SetFont(this, jNotepad;fontText.setVisible(true;else if(e.getSource(.equals(jMenuCutjNotepad
30、.cut(;else if(e.getSource(.equals(jMenuCopyjNotepad.copy(;else if(e.getSource(.equals(jMenuPastejNotepad.paste(;else if(e.getSource(.equals(jMenuSelectAlljNotepad.selectAll(;else if(e.getSource(.equals(jMenuDatejNotepad.insert(String.format("%1$tF %1$tT", new Date(, jNotepad.getSelectionSt
31、art(;else if(e.getSource(.equals(jMenuWrapjNotepad.setLineWrap(!jNotepad.getLineWrap(; / 自动换行public void mouseReleased(MouseEvent e / 处理鼠标释放事件JRadioButtonMenuItem item = (JRadioButtonMenuIteme.getSource(;switch(e.getButton( / 鼠标右键。case 1:File file = new File(item.getText(;if(file.exists(toFileReader
32、(file;elseJOptionPane.showMessageDialog(this, String.format("文件“ %s”不存 在! ", item.getText(;break;case 3:if(JOptionPane.showConfirmDialog(this, String.format("确实要删除“ %s” 吗 ? ", item.getText(, " 记 事 本 ", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE = 0jMenuList
33、.remove(item;break;default:break;public void mouseClicked(MouseEvent epublic void mouseEntered(MouseEvent epublic void mouseExited(MouseEvent epublic void mousePressed(MouseEvent epublic void caretUpdate(CaretEvent ejLabelLines.setText(String.format("总行数 %d", jNotepad.getLineCount(; packag
34、e notepad;public class Find implements ActionListenerprivate static final long serialVersionUID = 1L;private JLabel jLabelFind, jLabelReplace;private JTextField jTextFind, jTextReplace;private JButton jBtnFind, jBtnReplace, jBtnReplaceAll, jBtnCancel; private JCheckBox jUpperOrLower;private JRadioBu
35、tton jRadioUp, jRadioDn;private JTextArea jNotepad;private JDialog findDialog;private int startIndex = -1;public Find(JNotepad owner, JTextArea jTextjNotepad = jText;jLabelFind = new JLabel("查找:"jLabelFind.setBounds(16, 22, 42, 22;jLabelReplace = new JLabel("替换:"jLabelReplace.set
36、Bounds(16, 52, 42, 22;jTextFind = new JTextField(;jTextFind.setBounds(60, 22, 180, 22;jTextReplace = new JTextField(;jTextReplace.setBounds(60, 52, 180, 22;jBtnFind = new JButton("查找 (F"jBtnFind.setMnemonic('F'jBtnFind.setBounds(250, 22, 102, 22;jBtnFind.addActionListener(this;jBtn
37、Replace = new JButton("替换 (R"jBtnReplace.setMnemonic('R'jBtnReplace.setBounds(250, 52, 102, 22;jBtnReplace.addActionListener(this;jBtnReplaceAll = new JButton("全部替换 (A"jBtnReplaceAll.setMnemonic('A'jBtnReplaceAll.setBounds(250, 82, 102, 22;jBtnReplaceAll.addAction
38、Listener(this;jBtnCancel = new JButton("取消 (X"jBtnCancel.setMnemonic('X'jBtnCancel.setBounds(250, 112, 102, 22;jBtnCancel.addActionListener(this;jUpperOrLower = new JCheckBox("区分大小写 (C", false; jUpperOrLower.setMnemonic('C'jUpperOrLower.setBounds(14, 100, 106, 22;
39、jRadioUp = new JRadioButton("向上 ", false;jRadioDn = new JRadioButton("向下 ", true;jRadioDn.setBounds(184, 100, 52, 22;ButtonGroup group = new ButtonGroup(;group.add(jRadioUp;group.add(jRadioDn;findDialog = new JDialog(owner, "查找 /替换 " Container findPane = findDialog.getC
40、ontentPane(; findPane.setLayout(null;findPane.add(jLabelFind, null;findPane.add(jLabelReplace, null;findPane.add(jTextFind, null;findPane.add(jTextReplace, null;findPane.add(jBtnFind, null;findPane.add(jBtnReplace, null;findPane.add(jBtnReplaceAll, null;findPane.add(jBtnCancel, null;findPane.add(jUp
41、perOrLower, null;findPane.add(jRadioUp, null;findPane.add(jRadioDn, null;findDialog.setBounds(400, 200, 372, 188;findDialog.setModal(false; / 无模式findDialog.setResizable(false; / 固定窗体大小 findDialog.addWindowListener(new WindowAdapter( public void windowClosing(WindowEvent e jTextReplace.setText(null;j
42、TextFind.setText(null;jTextFind.requestFocusInWindow(;public void setVisible(boolean flagjTextFind.requestFocusInWindow(;findDialog.setVisible(flag;public void actionPerformed(ActionEvent eif(e.getSource(.equals(jBtnFindif(jRadioDn.isSelected(if(jUpperOrLower.isSelected(startIndex = jNotepad.getText
43、(.indexOf(jTextFind.getText(, jNotepad.getSelectionEnd(;elsestartIndex = jNotepad.getText(.toLowerCase(.indexOf(jTextFind.getText(.toLowerCase(, jNotepad.getSelectionEnd(;elsetryif(jUpperOrLower.isSelected(startIndex = jNotepad.getText(0, jNotepad.getSelectionStart(.lastIndexOf(jTextFind.getText(;el
44、sestartIndex = jNotepad.getText(0, jNotepad.getSelectionStart(.toLowerCase(.lastIndexOf(jTextFind.getText(.toLowerCase(; catch(BadLocationException seif(startIndex > -1jNotepad.select(startIndex, startIndex + jTextFind.getText(.length(;elseJOptionPane.showMessageDialog(findDialog, String.format(&
45、quot;找不到 “ %s” 已 完成对文档的搜索。 ", jTextFind.getText(, "记事本 ", 1;jTextReplace.setText(null;jTextFind.requestFocusInWindow(;jTextFind.selectAll(;else if(e.getSource(.equals(jBtnReplacejNotepad.replaceSelection(jTextReplace.getText(;jNotepad.select(jNotepad.getSelectionStart( - jTextReplace.
46、getText(.length(, jNotepad.getSelectionStart(;else if(e.getSource(.equals(jBtnReplaceAlljNotepad.setSelectionStart(0;while(jNotepad.getSelectionStart( < jNotepad.getText(.length(if(jUpperOrLower.isSelected(startIndex = jNotepad.getText(.indexOf(jTextFind.getText(, jNotepad.getSelectionStart(;else
47、startIndex = jNotepad.getText(.toLowerCase(.indexOf(jTextFind.getText(.toLowerCase(, jNotepad.getSelectionStart(;if(startIndex > -1jNotepad.select(startIndex, startIndex + jTextFind.getText(.length(; jNotepad.replaceSelection(jTextReplace.getText(;elsebreak;elsejTextReplace.setText(null;jTextFind
48、.setText(null;jTextFind.requestFocusInWindow(;findDialog.setVisible(false;package notepad;public class SetFont implements ActionListener, ListSelectionListener private static final long serialVersionUID = 1L;private JScrollPane jScrollName, jScrollSize;private JLabel jLabelName, jLabelStyle, jLabelS
49、ize;private JTextField jTextName, jTextStyle, jTextSize;private JList jListName, jListStyle, jListSize;private JButton jButtonOK, jButtonCancel, jButtonColor; private JTextArea jNotepad;private JDialog fontDialog;public SetFont(JNotepad owner, JTextArea jTextjNotepad = jText;jLabelName = new JLabel(
50、"字体名称 "jLabelName.setBounds(80, 16, 64, 20;jLabelStyle = new JLabel("字体类型 "jLabelStyle.setBounds(206, 16, 64, 20;jLabelSize = new JLabel("字体大小 "jLabelSize.setBounds(280, 16, 64, 20;jTextName = new JTextField(;jTextName.setBounds(16, 40, 180, 20;jTextStyle = new JTextFie
51、ld(;jTextStyle.setBounds(206, 40, 64, 20;jTextSize = new JTextField(;jTextSize.setBounds(280, 40, 64, 20;jButtonColor = new JButton("颜色 "jButtonColor.setBounds(28, 197, 75, 23;jButtonColor.addActionListener(this;jButtonOK = new JButton("确定 "jButtonOK.setBounds(150, 197, 75, 23;jB
52、uttonOK.addActionListener(this;jButtonCancel = new JButton("取消 "jButtonCancel.setBounds(256, 197, 75, 23;jButtonCancel.addActionListener(this;fontDialog = new JDialog(owner, "字体 "Container fontPane = fontDialog.getContentPane(;fontPane.setLayout(null;fontPane.add(jLabelName, null
53、;fontPane.add(jLabelStyle, null;fontPane.add(jLabelSize, null;fontPane.add(jTextName, null;fontPane.add(jTextStyle, null;fontPane.add(jTextSize, null;fontPane.add(getJScrollName(, null;fontPane.add(getJListStyle(, null;fontPane.add(getJScrollSize(, null;fontPane.add(jButtonColor, null;fontPane.add(j
54、ButtonOK, null;fontPane.add(jButtonCancel, null;fontDialog.setBounds(400, 200, 367,276;fontDialog.setModal(false; / 无模式fontDialog.setResizable(false; / 固定窗体大小fontDialog.addWindowListener(new WindowAdapter(public void windowClosing(WindowEvent ejTextName.setText(jListName.getSelectedValue(.toString(;
55、 jTextStyle.setText(jListStyle.getSelectedValue(.toString(; jTextSize.setText(jListSize.getSelectedValue(.toString(; ;public void setVisible(boolean flagfontDialog.setVisible(flag;private JScrollPane getJScrollName(if (jScrollName = nullString fontName = "宋体 "," 新宋体 "," 宋体 -
56、方正超大字符集 "," 仿宋 _GB2312","楷体 _GB2312"," 隶书 "," 黑体 "," 华文行楷 "," 华文彩云 "," 华文新魏 "," 华 文仿宋 "," 华文中宋 "," 华 文 细 黑 "," 方 正 舒 体 "," 方 正 姚 体 "," 幼 圆 ","Arial","Arial Black","Dialog","Times New Roman"jListName = new JList(fontName;jListName.addListSelectionListener(this;jListName.setSelectedIndex(0;jScrollName = new JScrollPane(;jScr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租客合同终止租房协议
- 技术开发与转让合同保密范本
- 智能化系统供货安装合同样本
- 矿山企业轮换工劳动合同模板及示例
- 农村土地出租权属合同样本
- 标准货物销售合同简版
- 城市配送服务合同一览
- 小学生种花演讲课件
- 影视设备行业交流服务批发考核试卷
- 广播电视节目的心理影响与教育意义考核试卷
- 低温绝热液氧瓶充装操作规程模版(2篇)
- 大众汽车使用说明书
- (高清版)DZT 0145-2017 土壤地球化学测量规程
- 供热公司安全教育知识
- 高中英语课程纲要
- 《药物设计学》课件
- 随机微分方程
- 道路设施施工现场安全管理基本要求
- 公寓楼改造装修施工方案
- 烟台大学化学化工学院实验室仪器设备搬迁项目
- 2022版10kV架空配电线路无人机自主巡检作业导则
评论
0/150
提交评论