JAVA记事本源代码 import java.awt.*; import java.awt.event.*; import java.text.*; import java.util.*; import java.io.*; import javax.swing.undo.*; import javax.swing.*; import javax.swing.event.*; import java.awt.datatransfer.*; import java.util.List; public class Notepad4 extends JFrame implements ActionListener, DocumentListener { JMenu mFile, mEdit, mMode, mView, mHelp; // ---------------文件菜单 JMenuItem mFile_New, mFile_Open, mFile_Save, mFile_ASave, mFile_Print, mFile_Exit; // ---------------编辑菜单 JMenuItem mEdit_Undo, mEdit_Cut, mEdit_Copy, mEdit_Paste, mEdit_Del, mEdit_Search, mEdit_SearchNext, mEdit_Replace, mEdit_Turnto, mEdit_SelectAll, mEdit_TimeDate; // ---------------格式菜单 JCheckBoxMenuItem formatMenu_LineWrap; JMenu formatMenu_Color; JMenuItem formatMenu_Font, formatMenu_Color_FgColor, formatMenu_Color_BgColor; // ---------------查看菜单 JCheckBoxMenuItem viewMenu_Status; // ---------------帮助菜单 JMenuItem mHelp_HelpTopics, mHelp_About; // ---------------弹出菜单级菜单项 JPopupMenu popupMenu; JMenuItem popupMenu_Undo, popupMenu_Cut, popupMenu_Copy, popupMenu_Paste, popupMenu_Delete, popupMenu_SelectAll; // ---------------工具栏按钮 JButton newButton, openButton, saveButton, saveAsButton, printButton, undoButton, redoButton, cutButton, copyButton, pasteButton, deleteButton, searchButton, timeButton, fontButton, boldButton, italicButton, fgcolorButton, bgcolorButton, helpButton; // 文本编辑区域 static JTextArea Text; // 状态栏标签 JLabel statusLabel1, statusLabel2, statusLabel3; JToolBar statusBar; // ---------------系统剪贴板 Toolkit toolKit = Toolkit.getDefaultToolkit(); Clipboard clipBoard = toolKit.getSystemClipboard(); // ---------------创建撤消操作管理器 protected UndoManager undo = new UndoManager(); protected UndoableEditListener undoHandler = new UndoHandler(); // ----------------其它变量 boolean isNewFile = true; // 是否新文件(未保存过的) File currentFile; // 当前文件名 String oldValue; // 存放编辑区原来的内容,用于比较文本是否有改动 JButton fontOkButton; // 字体设置里的"确定"按钮 // ----------------设置编辑区默认字体 protected Font defaultFont = new Font("宋体", Font.PLAIN, 12); GregorianCalendar time = new GregorianCalendar(); int hour = time.get(Calendar.HOUR_OF_DAY); int min = time.get(Calendar.MINUTE); int second = time.get(Calendar.SECOND); File saveFileName = null, fileName = null; public Notepad4() { super("VXBB的记事本"); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); Container container = getContentPane(); // System.out.println(Text.getDragEnabled()); //支持自动拖放 JScrollPane scroll = new JScrollPane(Text); scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); Text.setWrapStyleWord(true); // 设置单词在一行不足容纳时换行 Text.setLineWrap(true); Text.setFont(defaultFont); // 设置编辑区默认字体 Text.setBackground(Color.white); // 设置编辑区默认背景色 Text.setForeground(Color.black); // 设置编辑区默认前景色 oldValue = Text.getText(); // 获取原文本编辑区的内容 // --------------------------编辑区注册事件监听 Text.getDocument().addUndoableEditListener(undoHandler); // 添加负责通知任何更改的撤消侦听器 Text.getDocument().addDocumentListener(this); // 添加负责通知任何更改的文档侦听器 JMenuBar MenuBar = new JMenuBar(); mFile = new JMenu("文件(F)", true); // 创建菜单 mEdit = new JMenu("编辑(E)", true); mMode = new JMenu("格式(O)", true); mView = new JMenu("查看(V)", true); mHelp = new JMenu("帮助(H)", true); mEdit.addActionListener(new ActionListener() // 注册事件监听 { public void actionPerformed(ActionEvent e) { checkMenuItemEnabled(); // 设置剪切、复制、粘贴、删除等功能的可用性 } }); mFile.setMnemonic('F'); mEdit.setMnemonic('E'); mMode.setMnemonic('O'); mView.setMnemonic('V'); mHelp.setMnemonic('H'); MenuBar.add(mFile); MenuBar.add(mEdit); MenuBar.add(mMode); MenuBar.add(mView); MenuBar.add(mHelp); // --------------文件菜单 mFile_New = new JMenuItem("新建(N)", 'N'); mFile_Open = new JMenuItem("打开(O)", 'O'); mFile_Save = new JMenuItem("保存(S)", 'S'); mFile_ASave = new JMenuItem("另存为(A)", 'A'); mFile_Print = new JMenuItem("打印(P)", 'P'); mFile_Exit = new JMenuItem("退出(X)", 'X'); mFile_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK)); mFile_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); mFile_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); mFile_Print.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK)); mFile_New.addActionListener(this); // 注册事件监听 mFile_Open.addActionListener(this); mFile_Save.addActionListener(this); mFile_ASave.addActionListener(this); mFile_Print.addActionListener(this); mFile_Exit.addActionListener(this); mFile.add(mFile_New); // 添加菜单项 mFile.add(mFile_Open); mFile.add(mFile_Save); mFile.add(mFile_ASave); mFile.addSeparator(); // 添加分割线 mFile.add(mFile_Print); mFile.addSeparator(); // 添加分割线 mFile.add(mFile_Exit); // --------------编辑菜单 mEdit_Undo = new JMenuItem("撤消(U)", 'U'); mEdit_Cut = new JMenuItem("剪切(T)", 'T'); mEdit_Copy = new JMenuItem("复制(C)", 'C'); mEdit_Paste = new JMenuItem("粘贴(P)", 'P'); mEdit_Del = new JMenuItem("删除(L)", 'L'); mEdit_Search = new JMenuItem("查找(F)", 'F'); mEdit_SearchNext = new JMenuItem("查找下一个(N)", 'N'); mEdit_Replace = new JMenuItem("替换(R)", 'R'); mEdit_Turnto = new JMenuItem("转到(G)", 'G'); mEdit_SelectAll = new JMenuItem("全选(A)", 'A'); mEdit_TimeDate = new JMenuItem("时间/日期(D)", 'D'); mEdit_Cut.setEnabled(false); mEdit_Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK)); mEdit_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); mEdit_Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); mEdit_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); mEdit_Del.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); mEdit_Search.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK)); mEdit_SearchNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0)); mEdit_Replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK)); mEdit_Turnto.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK)); mEdit_SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK)); mEdit_TimeDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0)); mEdit_Undo.addActionListener(this); // 注册事件监听 mEdit_Cut.addActionListener(this); mEdit_Copy.addActionListener(this); mEdit_Paste.addActionListener(this); mEdit_Del.addActionListener(this); mEdit_Search.addActionListener(this); mEdit_SearchNext.addActionListener(this); mEdit_Replace.addActionListener(this); mEdit_Turnto.addActionListener(this); mEdit_SelectAll.addActionListener(this); mEdit_TimeDate.addActionListener(this); mEdit.add(mEdit_Undo); // 添加菜单项 mEdit.addSeparator(); // 添加分割线 mEdit.add(mEdit_Cut); mEdit.add(mEdit_Copy); mEdit.add(mEdit_Paste); mEdit.add(mEdit_Del); mEdit.addSeparator(); mEdit.add(mEdit_Search); mEdit.add(mEdit_SearchNext); mEdit.add(mEdit_Replace); mEdit.add(mEdit_Turnto); mEdit.addSeparator(); mEdit.add(mEdit_SelectAll); mEdit.add(mEdit_TimeDate); // --------------格式菜单 formatMenu_LineWrap = new JCheckBoxMenuItem("自动换行(W)"); formatMenu_LineWrap.setMnemonic('W'); formatMenu_LineWrap.setState(true); formatMenu_Font = new JMenuItem("字体(F)", 'F'); formatMenu_Color = n 回复举报飘过 0砸 0顶 0 2楼軒轅^-^葬愛 发表于 2008.11.23 13:28:42 ew JMenu("颜色"); formatMenu_Color_FgColor = new JMenuItem("字体颜色"); formatMenu_Color_BgColor = new JMenuItem("背景颜色"); formatMenu_LineWrap.addActionListener(this); // 注册事件监听 formatMenu_Font.addActionListener(this); formatMenu_Color_FgColor.addActionListener(this); formatMenu_Color_BgColor.addActionListener(this); mMode.add(formatMenu_LineWrap); // 添加菜单项 mMode.addSeparator(); mMode.add(formatMenu_Font); mMode.add(formatMenu_Color); formatMenu_Color.add(formatMenu_Color_FgColor); formatMenu_Color.add(formatMenu_Color_BgColor); // --------------查看菜单 viewMenu_Status = new JCheckBoxMenuItem("状态栏(S)"); viewMenu_Status.setMnemonic('S'); viewMenu_Status.setState(true); viewMenu_Status.addActionListener(this); mView.add(viewMenu_Status); // --------------帮助菜单 mHelp_HelpTopics = new JMenuItem("帮助(H)", 'H'); mHelp_About = new JMenuItem("关于(A)", 'A'); mHelp_HelpTopics.addActionListener(this); mHelp_About.addActionListener(this); mHelp.add(mHelp_HelpTopics); mHelp.addSeparator(); // 添加分割线 mHelp.add(mHelp_About); // -------------------创建右键弹出菜单 popupMenu = new JPopupMenu(); popupMenu_Undo = new JMenuItem("撤消(U)", 'U'); popupMenu_Cut = new JMenuItem("剪切(T)", 'T'); popupMenu_Copy = new JMenuItem("复制(C)", 'C'); popupMenu_Paste = new JMenuItem("粘贴(P)", 'P'); popupMenu_Delete = new JMenuItem("删除(D)", 'D'); popupMenu_SelectAll = new JMenuItem("全选(A)", 'A'); popupMenu_Undo.setEnabled(false); // 撤消选项初始设为不可用 // ---------------向右键菜单添加菜单项和分隔符 popupMenu.add(popupMenu_Undo); popupMenu.addSeparator(); popupMenu.add(popupMenu_Cut); popupMenu.add(popupMenu_Copy); popupMenu.add(popupMenu_Paste); popupMenu.add(popupMenu_Delete); popupMenu.addSeparator(); popupMenu.add(popupMenu_SelectAll); // --------------------右键菜单注册事件 popupMenu_Undo.addActionListener(this); popupMenu_Cut.addActionListener(this); popupMenu_Copy.addActionListener(this); popupMenu_Paste.addActionListener(this); popupMenu_Delete.addActionListener(this); popupMenu_SelectAll.addActionListener(this); // --------------------文本编辑区注册右键菜单事件 Text.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { checkForTriggerEvent(e); } public void mouseReleased(MouseEvent e) { checkForTriggerEvent(e); } private void checkForTriggerEvent(MouseEvent e) { if (e.isPopupTrigger()) popupMenu.show(e.getComponent(), e.getX(), e.getY());// 在组件调用者的坐标空间中的位置 // X、Y // 显示弹出菜单。 else { statusLabel3.setText("当前光标所在行数: " + getlineNumber()); } checkMenuItemEnabled(); // 设置剪切、复制、粘贴、删除等功能的可用性 Text.requestFocus(); // 编辑区获取焦点 } }); // ----------------------------创建工具栏 JPanel toolBar = new JPanel(); toolBar.setLayout(new FlowLayout(FlowLayout.LEFT)); Icon newIcon = new ImageIcon("Icons/new.gif"); Icon openIcon = new ImageIcon("Icons/open.gif"); Icon saveIcon = new ImageIcon("Icons/save.gif"); Icon saveAsIcon = new ImageIcon("Icons/saveas.gif"); Icon printIcon = new ImageIcon("Icons/print.gif"); Icon undoIcon = new ImageIcon("Icons/undo.gif"); Icon cutIcon = new ImageIcon("Icons/cut.gif"); Icon copyIcon = new ImageIcon("Icons/copy.gif"); Icon pasteIcon = new ImageIcon("Icons/paste.gif"); Icon deleteIcon = new ImageIcon("Icons/delete.gif"); Icon searchIcon = new ImageIcon("Icons/search.gif"); Icon timeIcon = new ImageIcon("Icons/time.gif"); Icon fontIcon = new ImageIcon("Icons/font.gif"); Icon boldIcon = new ImageIcon("Icons/bold.gif"); Icon italicIcon = new ImageIcon("Icons/italic.gif"); Icon bgcolorIcon = new ImageIcon("Icons/bgcolor.gif"); Icon fgcolorIcon = new ImageIcon("Icons/fgcolor.gif"); Icon helpIcon = new ImageIcon("Icons/help.gif"); newButton = new JButton(newIcon); openButton = new JButton(openIcon); saveButton = new JButton(saveIcon); saveAsButton = new JButton(saveAsIcon); printButton = new JButton(printIcon); undoButton = new JButton(undoIcon); undoButton.setEnabled(false); cutButton = new JButton(cutIcon); cutButton.setEnabled(false); copyButton = new JButton(copyIcon); copyButton.setEnabled(false); pasteButton = new JButton(pasteIcon); pasteButton.setEnabled(false); deleteButton = new JButton(deleteIcon); deleteButton.setEnabled(false); searchButton = new JButton(searchIcon); timeButton = new JButton(timeIcon); fontButton = new JButton(fontIcon); boldButton = new JButton(boldIcon); italicButton = new JButton(italicIcon); fgcolorButton = new JButton(fgcolorIcon); bgcolorButton = new JButton(bgcolorIcon); helpButton = new JButton(helpIcon); newButton.setPreferredSize(new Dimension(22, 22)); openButton.setPreferredSize(new Dimension(22, 22)); saveButton.setPreferredSize(new Dimension(22, 22)); saveAsButton.setPreferredSize(new Dimension(22, 22)); printButton.setPreferredSize(new Dimension(22, 22)); undoButton.setPreferredSize(new Dimension(22, 22)); cutButton.setPreferredSize(new Dimension(22, 22)); copyButton.setPreferredSize(new Dimension(22, 22)); pasteButton.setPreferredSize(new Dimension(22, 22)); deleteButton.setPreferredSize(new Dimension(22, 22)); searchButton.setPreferredSize(new Dimension(22, 22)); timeButton.setPreferredSize(new Dimension(22, 22)); fontButton.setPreferredSize(new Dimension(22, 22)); boldButton.setPreferredSize(new Dimension(22, 22)); italicButton.setPreferredSize(new Dimension(22, 22)); fgcolorButton.setPreferredSize(new Dimension(22, 22)); bgcolorButton.setPreferredSize(new Dimension(22, 22)); helpButton.setPreferredSize(new Dimension(22, 22)); // -----------------------------------注册工具栏按钮事件 newButton.addActionListener(this); openButton.addActionListener(this); saveButton.addActionListener(this); saveAsButton.addActionListener(this); printButton.addActionListener(this); undoButton.addActionListener(this); cutButton.addActionListener(this); copyButton.addActionListener(this); pasteButton.addActionListener(this); deleteButton.addActionListener(this); searchButton.addActionListener(this); timeButton.addActionListener(this); fontButton.addActionListener(this); boldButton.addActionListener(this); italicButton.addActionListener(this); fgcolorButton.addActionListener(this); bgcolorButton.addActionListener(this); helpButton.addActionListener(this); // ------------------------设置按钮提示文字 newButton.setToolTipText("新建"); openButton.setToolTipText("打开"); saveButton.setToolTipText("保存"); saveAsButton.setToolTipText("另存为"); printButton.setToolTipText("打印"); undoButton.setToolTipText("撤消"); cutButton.setToolTipText("剪切"); copyButton.setToolTipText("复制"); pasteButton.setToolTipText("粘贴"); deleteButton.setToolTipText("删除所选"); searchButton.setToolTipText("查找与替换"); timeButton.setToolTipText("插入时间/日期"); fontButton.setToolTipText("设置字体"); boldButton.setToolTipText("粗体"); italicButton.setToolTipText("斜体"); fgcolorButton.setToolTipText("设置字体颜色"); bgcolorButton.setToolTipText("设置背景颜色"); helpButton.setToolTipText("帮助"); // 设置撤消、重做、剪切、复制、粘贴、删除等工具栏按钮不可用时的图片(灰色) undoButton.setDisabledIcon(new ImageIcon("Icons/undo1.gif")); cutButton.setDisabledIcon(new ImageIcon("Icons/cut1.gif")); copyButton.setDisabledIcon(new ImageIcon("Icons/copy1.gif")); pasteButton.setDisabledIcon(new ImageIcon("Icons/paste1.gif")); deleteButton.setDisabledIcon(new ImageIcon("Icons/delete1.gif")); // ------------------------向工具栏添加按钮 toolBar.add(newButton); toolBar.add(openButton); toolBar.add(saveButton); toolBar.add(saveAsButton); toolBar.add(printButton); toolBar.add(undoButton); toolBar.add(cutButton); toolBar.add(copyButton); toolBar.add(pasteButton); toolBar.add(deleteButton); toolBar.add(searchButton); toolBar.add(timeButton); toolBar.add(fontButton); toolBar.add(boldButton); toolBar.add(italicButton); toolBar.add(fgcolorButton); toolBar.add(bgcolorButton); toolBar.add(helpButton); // --------------------------------------向容器添加工具栏 container.add(toolBar, BorderLayout.NORTH); // -----------------------------------创建和添加状态栏 statusBar = new JToolBar(); statusBar.setLayout(new FlowLayout(FlowLayout.LEFT)); statusLabel1 = new JLabel("按F1获取帮助 "); statusLabel2 = new JLabel(" 当前时间:" + hour + ":" + min + ":" + second); statusLabel3 = new JLabel(" 当前光标所在行数" + getlineNumber()); statusBar.add(statusLabel1); statusBar.addSeparator(); statusBar.add(statusLabel2); statusBar.addSeparator(); statusBar.add(statusLabel3); container.add(statusBar, BorderLayout.SOUTH); statusBar.setVisible(true); // ------------------------------------改变标题栏窗口左侧默认图标 Toolkit tk = Toolkit.getDefaultToolkit(); Image image = tk.createImage("Icons/notepad.gif"); this.setIconImage(image); this.setJMenuBar(MenuBar); // 向窗口添加菜单条 container.add(scroll, BorderLayout.CENTER); // 向容器添加文本编辑区 this.pack(); this.setSize(800, 800); this.setVisible(true); checkMenuItemEnabled(); Text.requestFocus(); //this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { checkText(); } }); Clock clock = new Clock(); clock.start(); } public void checkText() { Text.requestFocus(); String currentValue = Text.getText(); boolean isTextChange = (currentValue.equals(oldValue)) ? false : true; if (isTextChange) { int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存。是否保存?", "提示", JOptionPane.YES_NO_CANCEL_OPTION); if (saveChoose == JOptionPane.YES_OPTION) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setApproveButtonText("确定"); fileChooser.setDialogTitle("另存为"); int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.CANCEL_OPTION) { statusLabel1.setText("您没有选择任何文件"); return; } saveFileName = fileChooser.getSelectedFile(); if (saveFileName == null || saveFileName.getName().equals("")) JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); else { saveFile(); Text.setText(""); this.setTitle("新建文本"); statusLabel1.setText(" 新建文本"); } } else if (saveChoose == JOptionPane.NO_OPTION) { System.exit(0); } else if (saveChoose == JOptionPane.CANCEL_OPTION) { Text.requestFocus(); } } else if (!isTextChange) { System.exit(0); } } public void checkMenuItemEnabled() { String selectText = Text.getSelectedText(); if (selectText == null) { mEdit_Cut.setEnabled(false); popupMenu_Cut.setEnabled(false); cutButton.setEnabled(false); mEdit_Copy.setEnabled(false); popupMenu_Copy.setEnabled(false); copyButton.setEnabled(false); mEdit_Del.setEnabled(false); popupMenu_Delete.setEnabled(false); deleteButton.setEnabled(false); } else { mEdit_Cut.setEnabled(true); popupMenu_Cut.setEnabled(true); cutButton.setEnabled(true); mEdit_Copy.setEnabled(true); popupMenu_Copy.setEnabled(true); copyButton.setEnabled(true); mEdit_Del.setEnabled(true); popupMenu_Delete.setEnabled(true); deleteButton.setEnabled(true); } // 粘贴功能可用性判断 Transferable contents = clipBoard.getContents(this); if (contents == null) { mEdit_Paste.setEnabled(false); popupMenu_Paste.setEnabled(false); pasteButton.setEnabled(false); } else { mEdit_Paste.setEnabled(true); popupMenu_Paste.setEnabled(true); pasteButton.setEnabled(true); } } public int getlineNumber() { int totalLine = Text.getLineCount(); int[] lineNumber = new int[totalLine + 1]; int pos = 0, t = 0, num = 0, i = 0; String s = Text.getText(); while (true) { pos = s.indexOf('/12', pos); // 返回 /n 所在的位置 if (pos == -1) break; lineNumber[t++] = pos++; } if (Text.getCaretPosition() <= lineNumber[0]) num = 1; else { if (Text.getCaretPosition() > lineNumber[Text.getLineCount() - 1]) num = Text.getLineCount(); for (i = 0; i < totalLine + 1; i++) { if (Text.getCaretPosition() <= lineNumber[i]) { num = i + 1; break; } else continue; } } return num; } public void saveFile() { try { FileWriter fw = new FileWriter(saveFileName); fw.write(Text.getText()); fw.close(); } catch (Exception e) { } } public void mySearch() { final JDialog findDialog = new JDialog(this, "查找与替换", true); Container con = findDialog.getContentPane(); con.setLayout(new FlowLayout(FlowLayout.LEFT)); JLabel searchContentLabel = new JLabel("查找内容(N) :"); JLabel replaceContentLabel = new JLabel("替换为(P)  :"); final JTextField findText = new JTextField(22); final JTextField replaceText = new JTextField(22); final JCheckBox matchcase = new JCheckBox("区分大小写"); ButtonGroup bGroup = new ButtonGroup(); final JRadioButton up = new JRadioButton("向上(U)"); final JRadioButton down = new JRadioButton("向下(D)"); down.setSelected(true); bGroup.add(up); bGroup.add(down); JButton searchNext = new JButton("查找下一个(F)"); JButton replace = new JButton("替换(R)"); final JButton replaceAll = new JButton("全部替换(A)"); searchNext.setPreferredSize(new Dimension(110, 22)); replace.setPreferredSize(new Dimension(110, 22)); replaceAll.setPreferredSize(new Dimension(110, 22)); // "替换"按钮的事件处理 replace.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (replaceText.getText().length() == 0 && Text.getSelectedText() != null) Text.replaceSelection(""); if (replaceText.getText().length() > 0 && Text.getSelectedText() != null) Text.replaceSelection(replaceText.getText()); } }); // "替换全部"按钮的事件处理 replaceAll.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Text.setCaretPosition(0); // 将光标放到编辑区开头 int a = 0, b = 0, replaceCount = 0; if (findText.getText().length() == 0) { JOptionPane.showMessageDialog(findDialog, "请填写查找内容!", "提示", JOptionPane.WARNING_MESSAGE); findText.requestFocus(true); return; } while (a > -1) { int FindStartPos = Text.getCaretPosition(); String str1, str2, str3, str4, strA, strB; str1 = Text.getText(); str2 = str1.toLowerCase(); str3 = findText.getText(); str4 = str3.toLowerCase(); if (matchcase.isSelected()) { strA = str1; strB = str3; } else { strA = str2; strB = str4; } if (up.isSelected()) { if (Text.getSelectedText() == null) { a = strA.lastIndexOf(strB, FindStartPos - 1); } else { a = strA.lastIndexOf(strB, FindStartPos - findText.getText().length() - 1); } } else if (down.isSelected()) { if (Text.getSelectedText() == null) { a = strA.indexOf(strB, FindStartPos); } else { a = strA.indexOf(strB, FindStartPos - findText.getText().length() + 1); } } if (a > -1) { if (up.isSelected()) { Text.setCaretPosition(a); b = findText.getText().length(); Text.select(a, a + b); } else if (down.isSelected()) { Text.setCaretPosition(a); b = findText.getText().length(); Text.select(a, a + b); } } else { if (replaceCount == 0) { JOptionPane.showMessageDialog(findDialog, "找不到您查找的内容!", "记事本", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(findDialog, "成功替换" + replaceCount + "个匹配内容!", "替换成功", JOptionPane.INFORMATION_MESSAGE); } } if (replaceText.getText().length() == 0 && Text.getSelectedText() != null) { Text.replaceSelection(""); replaceCount++; } if (replaceText.getText().length() > 0 && Text.getSelectedText() != null) { Text.replaceSelection(replaceText.getText()); replaceCount++; } }// end while } }); /* "替换全部"按钮的事件处理结束 */ // "查找下一个"按钮事件处理 searchNext.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int a = 0, b = 0; int FindStartPos = Text.getCaretPosition(); String str1, str2, str3, str4, strA, strB; str1 = Text.getText(); str2 = str1.toLowerCase(); str3 = findText.getText(); str4 = str3.toLowerCase(); // "区分大小写"的CheckBox被选中 if (matchcase.isSelected()) { strA = str1; strB = str3; } else { strA = str2; strB = str4; } if (up.isSelected()) { if (Text.getSelectedText() == null) { a = strA.lastIndexOf(strB, FindStartPos - 1); } else { a = strA.lastIndexOf(strB, FindStartPos - findText.getText().length() - 1); } } else if (down.isSelected()) { if (Text.getSelectedText() == null) { a = strA.indexOf(strB, FindStartPos); } else { a = strA.indexOf(strB, FindStartPos - findText.getText().length() + 1); } } if (a > -1) { if (up.isSelected()) { Text.setCaretPosition(a); b = findText.getText().length(); Text.select(a, a + b); } else if (down.isSelected()) { Text.setCaretPosition(a); b = findText.getText().length(); Text.select(a, a + b); } } else { JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "记事本", JOptionPane.INFORMATION_MESSAGE); } } });/* "查找下一个"按钮事件处理结束 */ // "取消"按钮及事件处理 JButton cancel = new JButton("取消"); cancel.setPreferredSize(new Dimension(110, 22)); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { findDialog.dispose(); } }); // 创建"查找与替换"对话框的界面 JPanel bottomPanel = new JPanel(); JPanel centerPanel = new JPanel(); JPanel topPanel = new JPanel(); JPanel direction = new JPanel(); direction.setBorder(BorderFactory.createTitledBorder("方向 ")); direction.add(up); direction.add(down); direction.setPreferredSize(new Dimension(170, 60)); JPanel replacePanel = new JPanel(); replacePanel.setLayout(new GridLayout(2, 1)); replacePanel.add(replace); replacePanel.add(replaceAll); topPanel.add(searchContentLabel); topPanel.add(findText); topPanel.add(searchNext); centerPanel.add(replaceContentLabel); centerPanel.add(replaceText); centerPanel.add(replacePanel); bottomPanel.add(matchcase); bottomPanel.add(direction); bottomPanel.add(cancel); con.add(topPanel); con.add(centerPanel); con.add(bottomPanel); // 设置"查找与替换"对话框的大小、可更改大小(否)、位置和可见性 findDialog.setSize(410, 210); findDialog.setResizable(false); findDialog.setLocation(230, 280); findDialog.setVisible(true); } /* 方法mySearch()结束 */ // 实现ActionListener的事件处理方法public void actionPerformed(ActionEvent e) public void actionPerformed(ActionEvent e) { // 新建 if (e.getActionCommand().equals("新建(N)") || e.getSource() == newButton) // 最初发生 Event 的对象 // if(e.getSource()==mFile_New||e.getSource()==newButton) { Text.requestFocus(); String currentValue = Text.getText(); boolean isTextChange = (currentValue.equals(oldValue)) ? false : true; if (isTextChange) { int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存。是否保存?", "提示", JOptionPane.YES_NO_CANCEL_OPTION); if (saveChoose == JOptionPane.YES_OPTION) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setApproveButtonText("确定"); fileChooser.setDialogTitle("另存为"); int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.CANCEL_OPTION) { statusLabel1.setText("您没有选择任何文件"); return; } saveFileName = fileChooser.getSelectedFile(); if (saveFileName == null || saveFileName.getName().equals("")) JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); else { saveFile(); Text.setText(""); this.setTitle("新建文本"); statusLabel1.setText(" 新建文本"); } } else if (saveChoose == JOptionPane.NO_OPTION) { Text.replaceRange("", 0, Text.getText().length()); statusLabel1.setText(" 新建文件"); this.setTitle("无标题 - 记事本"); isNewFile = true; undo.discardAllEdits(); // 撤消所有的"撤消"操作 mEdit_Undo.setEnabled(false); popupMenu_Undo.setEnabled(false); undoButton.setEnabled(false); redoButton.setEnabled(false); oldValue = Text.getText(); } else if (saveChoose == JOptionPane.CANCEL_OPTION) { return; } } else { // Text.replaceRange("", 0, Text.getText().length()); Text.setText(""); statusLabel1.setText(" 新建文件"); this.setTitle("无标题 - 记事本"); isNewFile = true; undo.discardAllEdits(); mEdit_Undo.setEnabled(false); popupMenu_Undo.setEnabled(false); undoButton.setEnabled(false); oldValue = Text.getText(); } }// 新建处理结束 // 打开 else if (e.getActionCommand().equals("打开(O)") || e.getSource() == openButton) { Text.requestFocus(); String currentValue = Text.getText(); boolean isTextChange = (currentValue.equals(oldValue)) ? false : true; if (isTextChange) { int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存。是否保存?", "提示", JOptionPane.YES_NO_CANCEL_OPTION); if (saveChoose == JOptionPane.YES_OPTION) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setApproveButtonText("确定"); fileChooser.setDialogTitle("另存为"); int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.CANCEL_OPTION) { statusLabel1.setText("您没有选择任何文件"); return; } saveFileName = fileChooser.getSelectedFile(); if (saveFileName == null || saveFileName.getName().equals("")) JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); else { saveFile(); isNewFile = false; currentFile = saveFileName; oldValue = Text.getText(); this.setTitle(saveFileName.getName() + " - 记事本"); statusLabel1.setText(" 当前打开文件:" + saveFileName.getAbsoluteFile()); } } else if (saveChoose == JOptionPane.NO_OPTION) { String str = null; JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setApproveButtonText("确定"); fileChooser.setDialogTitle("打开文件"); int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.CANCEL_OPTION) { statusLabel1.setText("您没有选择任何文件"); return; } fileName = fileChooser.getSelectedFile(); if (fileName == null || fileName.getName().equals("")) JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); else { try { FileReader fr = new FileReader(fileName); BufferedReader bfr = new BufferedReader(fr); Text.setText(""); while ((str = bfr.readLine()) != null) {// 每次读取一行,直到文件结束 Text.append(str + "/15/12"); }// endwhile this.setTitle(fileName.getName() + " - 记事本"); statusLabel1.setText(" 当前打开文件:" + fileName.getAbsoluteFile()); fr.close(); isNewFile = false; currentFile = fileName; oldValue = Text.getText(); } catch (IOException ioException) { } } } else { return; } } else { String str = null; JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setApproveButtonText("确定"); fileChooser.setDialogTitle("打开文件"); int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.CANCEL_OPTION) { statusLabel1.setText(" 您没有选择任何文件"); return; } fileName = fileChooser.getSelectedFile(); if (fileName == null || fileName.getName().equals("")) JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); else { try { FileReader fr = new FileReader(fileName); BufferedReader bfr = new BufferedReader(fr); Text.setText(""); while ((str = bfr.readLine()) != null) {// 每次读取一行,直到文件结束 Text.append(str + "/15/12"); }// endwhile this.setTitle(fileName.getName() + " - 记事本"); statusLabel1.setText(" 当前打开文件:" + fileName.getAbsoluteFile()); fr.close(); isNewFile = false; currentFile = fileName; oldValue = Text.getText(); } catch (IOException ioException) { } } } }// "打开"处理结束 // 保存 else if (e.getSource() == mFile_Save || e.getSource() == saveButton) { Text.requestFocus(); if (isNewFile) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setApproveButtonText("确定"); fileChooser.setDialogTitle("另存为"); int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.CANCEL_OPTION) { statusLabel1.setText(" 您没有选择任何文件"); return; } saveFileName = fileChooser.getSelectedFile(); if (saveFileName == null || saveFileName.getName().equals("")) JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); else { saveFile(); isNewFile = false; currentFile = saveFileName; oldValue = Text.getText(); this.setTitle(saveFileName.getName() + " - 记事本"); statusLabel1.setText(" 当前打开文件:" + saveFileName.getAbsoluteFile()); } } else { try { FileWriter fw = new FileWriter(currentFile); BufferedWriter bfw = new BufferedWriter(fw); bfw.write(Text.getText(), 0, Text.getText().length()); bfw.flush(); fw.close(); } catch (IOException ioException) { } } }// "保存"处理结束 // 另存为 else if (e.getSource() == mFile_ASave || e.getSource() == saveAsButton) { Text.requestFocus(); JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setApproveButtonText("确定"); fileChooser.setDialogTitle("另存为"); int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.CANCEL_OPTION) { statusLabel1.setText(" 您没有选择任何文件"); return; } saveFileName = fileChooser.getSelectedFile(); if (saveFileName == null || saveFileName.getName().equals("")) JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); else { saveFile(); isNewFile = false; currentFile = saveFileName; oldValue = Text.getText(); this.setTitle(saveFileName.getName() + " - 记事本"); statusLabel1.setText(" 当前打开文件:" + saveFileName.getAbsoluteFile()); } }// "另存为"处理结束 // 打印 else if (e.getSource() == mFile_Print || e.getSource() == printButton) { Text.requestFocus(); JOptionPane.showMessageDialog(this, "此功能尚未添加!", "提示", JOptionPane.WARNING_MESSAGE); } // 退出 else if (e.getSource() == mFile_Exit) { int exitChoose = JOptionPane.showConfirmDialog(this, "确定要退出么?", "退出提示", JOptionPane.OK_CANCEL_OPTION); if (exitChoose == JOptionPane.OK_OPTION) { checkText(); } else { return; } } // 撤消 else if (e.getSource() == mEdit_Undo || e.getSource() == popupMenu_Undo || e.getSource() == undoButton) { Text.requestFocus(); if (undo.canUndo()) { try { undo.undo(); } catch (CannotUndoException ex) { System.out.println("Unable to undo: " + ex); ex.printStackTrace(); } if (!undo.canUndo()) { mEdit_Undo.setEnabled(false); popupMenu_Undo.setEnabled(false); undoButton.setEnabled(false); } } } // 剪切 else if (e.getSource() == mEdit_Cut || e.getSource() == popupMenu_Cut || e.getSource() == cutButton) { Text.requestFocus(); String text = Text.getSelectedText(); StringSelection selection = new StringSelection(text); clipBoard.setContents(selection, null); Text.replaceRange("", Text.getSelectionStart(), Text.getSelectionEnd()); checkMenuItemEnabled(); // 设置剪切、复制、粘贴、删除等功能的可用性 } // 复制 else if (e.getSource() == mEdit_Copy || e.getSource() == popupMenu_Copy || e.getSource() == copyButton) { Text.requestFocus(); String text = Text.getSelectedText(); StringSelection selection = new StringSelection(text); clipBoard.setContents(selection, null); checkMenuItemEnabled(); // 设置剪切、复制、粘贴、删除等功能的可用性 } // 粘贴 else if (e.getSource() == mEdit_Paste || e.getSource() == popupMenu_Paste || e.getSource() == pasteButton) { Text.requestFocus(); Transferable contents = clipBoard.getContents(this); if (contents == null) return; String text; text = ""; try { text = (String) contents.getTransferData(DataFlavor.stringFlavor); } catch (Exception exception) { } Text.replaceRange(text, Text.getSelectionStart(), Text.getSelectionEnd()); checkMenuItemEnabled(); // 设置剪切、复制、粘贴、删除等功能的可用性 } // 删除 else if (e.getSource() == mEdit_Del || e.getSource() == popupMenu_Delete || e.getSource() == deleteButton) { Text.requestFocus(); Text.replaceRange("", Text.getSelectionStart(), Text.getSelectionEnd()); checkMenuItemEnabled(); // 设置剪切、复制、粘贴、删除等功能的可用性 } // 查找 else if (e.getSource() == mEdit_Search || e.getSource() == searchButton) { Text.requestFocus(); if (e.getSource() == searchButton) { Text.requestFocus(); Text.setCaretPosition(0); } mySearch(); } // 查找下一个(此功能尚未能很好实现,所以就先用查找功能来代替) else if (e.getSource() == mEdit_SearchNext) { mySearch(); } // 替换(与查找功能集成在一起了) else if (e.getSource() == mEdit_Replace) { mySearch(); } // 转到 else if (e.getSource() == mEdit_Turnto) { final JDialog gotoDialog = new JDialog(this, "转到下列行"); JLabel gotoLabel = new JLabel("行数(L):"); final JTextField linenum = new JTextField(5); linenum.setText("1"); linenum.selectAll(); JButton okButton = new JButton("确定"); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int totalLine = Text.getLineCount(); int[] lineNumber = new int[totalLine + 1]; String s = Text.getText(); int pos = 0, t = 0; while (true) { pos = s.indexOf('/12', pos); // System.out.println("引索pos:"+pos); if (pos == -1) break; lineNumber[t++] = pos++; } int gt = 1; try { gt = Integer.parseInt(linenum.getText()); } catch (NumberFormatException efe) { JOptionPane.showMessageDialog(null, "请输入行数!", "提示", JOptionPane.WARNING_MESSAGE); linenum.requestFocus(true); return; } if (gt < 2 || gt >= totalLine) { if (gt < 2) Text.setCaretPosition(0); else Text.setCaretPosition(s.length()); } else Text.setCaretPosition(lineNumber[gt - 2] + 1); gotoDialog.dispose(); } }); JButton cancelButton = new JButton("取消"); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { gotoDialog.dispose(); } }); Container con = gotoDialog.getContentPane(); con.setLayout(new FlowLayout()); con.add(gotoLabel); con.add(linenum); con.add(okButton); con.add(cancelButton); gotoDialog.setSize(200, 100); gotoDialog.setResizable(false); gotoDialog.setLocation(300, 280); gotoDialog.setVisible(true); }// "转到"处理结束 // 插入时间日期 else if (e.getSource() == mEdit_TimeDate || e.getSource() == timeButton) { Text.requestFocus(); SimpleDateFormat currentDateTime = new SimpleDateFormat("HH:mm yyyy-MM-dd"); Text.insert(currentDateTime.format(new Date()), Text.getCaretPosition()); } // 全选 else if (e.getSource() == popupMenu_SelectAll || e.getSource() == mEdit_SelectAll) { Text.selectAll(); } // 自动换行 else if (e.getSource() == formatMenu_LineWrap) { if (formatMenu_LineWrap.getState()) { Text.setLineWrap(true); } else Text.setLineWrap(false); } // 字体设置 else if (e.getSource() == formatMenu_Font || e.getSource() == fontButton) { Text.requestFocus(); new MyFont(); } // 设置字体颜色(前景色) else if (e.getSource() == formatMenu_Color_FgColor || e.getSource() == fgcolorButton) { Text.requestFocus(); Color color = JColorChooser.showDialog(this, "更改字体颜色", Color.black); if (color != null) { Text.setForeground(color); } else return; } // 设置编辑区背景颜色 else if (e.getSource() == formatMenu_Color_BgColor || e.getSource() == bgcolorButton) { Text.requestFocus(); Color color = JColorChooser.showDialog(this, "更改背景颜色", Color.white); if (color != null) { Text.setBackground(color); } else return; } // 设置状态栏可见性 else if (e.getSource() == viewMenu_Status) { if (viewMenu_Status.getState()) statusBar.setVisible(true); else statusBar.setVisible(false); } // 帮助主题 else if (e.getSource() == mHelp_HelpTopics || e.getSource() == helpButton) { JOptionPane.showMessageDialog(this, "记事本支持拖入文本读取/n" + "由于对编码不熟悉保存文/n件时未进行编码转换/n", "帮助主题", JOptionPane.INFORMATION_MESSAGE); } // 关于 else if (e.getSource() == mHelp_About) { JOptionPane.showMessageDialog(this, " VXBB的记事本/n" + " QQ:491697374/n" + " JAVA图形界面练习/n", "关于记事本", JOptionPane.INFORMATION_MESSAGE); } // 工具栏"粗体"按钮事件处理 else if (e.getSource() == boldButton) { Text.requestFocus(); Font tempFont = Text.getFont(); if (Text.getFont().getStyle() == Font.PLAIN) { tempFont = new Font(Text.getFont().getFontName(), Font.BOLD, Text.getFont().getSize()); } else if (Text.getFont().getStyle() == Font.ITALIC) { tempFont = new Font(Text.getFont().getFontName(), Font.BOLD + Font.ITALIC, Text.getFont().getSize()); } else if (Text.getFont().getStyle() == Font.BOLD) { tempFont = new Font(Text.getFont().getFontName(), Font.PLAIN, Text.getFont().getSize()); } else if (Text.getFont().getStyle() == (Font.BOLD + Font.ITALIC)) { tempFont = new Font(Text.getFont().getFontName(), Font.ITALIC, Text.getFont().getSize()); } Text.setFont(tempFont); } // 工具栏"斜体"按钮事件处理 else if (e.getSource() == italicButton) { Text.requestFocus(); Font tempFont = Text.getFont(); if (Text.getFont().getStyle() == Font.PLAIN) { tempFont = new Font(Text.getFont().getFontName(), Font.ITALIC, Text.getFont().getSize()); } else if (Text.getFont().getStyle() == Font.ITALIC) { tempFont = new Font(Text.getFont().getFontName(), Font.PLAIN, Text.getFont().getSize()); } else if (Text.getFont().getStyle() == Font.BOLD) { tempFont = new Font(Text.getFont().getFontName(), Font.BOLD + Font.ITALIC, Text.getFont().getSize()); } else if (Text.getFont().getStyle() == (Font.BOLD + Font.ITALIC)) { tempFont = new Font(Text.getFont().getFontName(), Font.BOLD, Text.getFont().getSize()); } Text.setFont(tempFont); } }/* 方法actionPerformed()结束 */ class Clock extends Thread { // 模拟时钟 public void run() { while (true) { GregorianCalendar time = new GregorianCalendar(); int hour = time.get(Calendar.HOUR_OF_DAY); int min = time.get(Calendar.MINUTE); int second = time.get(Calendar.SECOND); statusLabel2.setText(" 当前时间:" + hour + ":" + min + ":" + second); try { Thread.sleep(950); } catch (InterruptedException exception) { } } } } // 用于设置字体的类MyFont class MyFont implements ActionListener { final JDialog fontDialog; final JTextField tfFont, tfSize, tfStyle; final int fontStyleConst[] = { Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD + Font.ITALIC }; final JList listStyle, listFont, listSize; JLabel sample; JPanel pane1, pane2, pane3, pane4; // 构造函数MyFont public MyFont() { fontDialog = new JDialog(Notepad4.this, "字体设置", true); Container con = fontDialog.getContentPane(); con.setLayout(new BoxLayout(con, BoxLayout.Y_AXIS)); pane1 = new JPanel(); pane2 = new JPanel(); pane3 = new JPanel(); pane4 = new JPanel(); Font currentFont = Text.getFont(); JLabel lblFont = new JLabel("字体(F):"); JLabel lblStyle = new JLabel("字形(Y):"); JLabel lblSize = new JLabel("大小(S):"); lblStyle.setHorizontalAlignment(SwingConstants.CENTER); lblSize.setHorizontalAlignment(SwingConstants.CENTER); lblFont.setPreferredSize(new Dimension(91, 20)); lblStyle.setPreferredSize(new Dimension(82, 20)); lblSize.setPreferredSize(new Dimension(100, 20)); tfFont = new JTextField(13); tfFont.setText(currentFont.getFontName()); tfFont.selectAll(); tfFont.setPreferredSize(new Dimension(200, 20)); tfStyle = new JTextField(10); if (currentFont.getStyle() == Font.PLAIN) tfStyle.setText("常规"); else if (currentFont.getStyle() == Font.BOLD) tfStyle.setText("粗体"); else if (currentFont.getStyle() == Font.ITALIC) tfStyle.setText("斜体"); else if (currentFont.getStyle() == (Font.BOLD + Font.ITALIC)) tfStyle.setText("粗斜体"); tfFont.selectAll(); tfStyle.setPreferredSize(new Dimension(200, 20)); tfSize = new JTextField(7); tfSize.setText(currentFont.getSize() + ""); tfSize.selectAll(); tfSize.setPreferredSize(new Dimension(200, 20)); final String fontStyle[] = { "常规", "粗体", "斜体", "粗斜体" }; listStyle = new JList(fontStyle); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); final String fontName[] = ge.getAvailableFontFamilyNames(); int defaultFontIndex = 0; for (int i = 0; i < fontName.length; i++) { if (fontName[i].equals(currentFont.getFontName())) { defaultFontIndex = i; break; } } listFont = new JList(fontName); listFont.setSelectedIndex(defaultFontIndex); listFont.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); listFont.setVisibleRowCount(7); listFont.setFixedCellWidth(99); listFont.setFixedCellHeight(20); listFont.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent event) { tfFont.setText(fontName[listFont.getSelectedIndex()]); tfFont.requestFocus(); tfFont.selectAll(); updateSample(); } }); listStyle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); if (currentFont.getStyle() == Font.PLAIN) listStyle.setSelectedIndex(0); else if (currentFont.getStyle() == Font.BOLD) listStyle.setSelectedIndex(1); else if (currentFont.getStyle() == Font.ITALIC) listStyle.setSelectedIndex(2); else if (currentFont.getStyle() == (Font.BOLD + Font.ITALIC)) listStyle.setSelectedIndex(3); listStyle.setVisibleRowCount(7); listStyle.setFixedCellWidth(85); listStyle.setFixedCellHeight(20); listStyle.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent event) { tfStyle.setText(fontStyle[listStyle.getSelectedIndex()]); tfStyle.requestFocus(); tfStyle.selectAll(); updateSample(); } }); final String fontSize[] = { "8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36", "48", "72" }; listSize = new JList(fontSize); int defaultFontSizeIndex = 0; for (int i = 0; i < fontSize.length; i++) { if (fontSize[i].equals(currentFont.getSize() + "")) { defaultFontSizeIndex = i; break; } } listSize.setSelectedIndex(defaultFontSizeIndex); listSize.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); listSize.setVisibleRowCount(7); listSize.setFixedCellWidth(50); listSize.setFixedCellHeight(20); listSize.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent event) { tfSize.setText(fontSize[listSize.getSelectedIndex()]); tfSize.requestFocus(); tfSize.selectAll(); updateSample(); } }); fontOkButton = new JButton("确定"); fontOkButton.addActionListener(this); JButton cancelButton = new JButton("取消"); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fontDialog.dispose(); } }); sample = new JLabel(" 记事本 "); sample.setHorizontalAlignment(SwingConstants.CENTER); sample.setPreferredSize(new Dimension(150, 31)); JPanel samplePanel = new JPanel(); samplePanel.setBorder(BorderFactory.createTitledBorder("示例")); samplePanel.add(sample); pane1.add(lblFont); pane1.add(lblStyle); pane1.add(lblSize); pane2.add(tfFont); pane2.add(tfStyle); pane2.add(tfSize); pane3.add(new JScrollPane(listFont)); pane3.add(new JScrollPane(listStyle)); pane3.add(new JScrollPane(listSize)); pane4.add(samplePanel); pane4.add(fontOkButton); pane4.add(cancelButton); con.add(pane1); con.add(pane2); con.add(pane3); con.add(pane4); updateSample(); fontDialog.pack(); fontDialog.setSize(400, 400); fontDialog.setLocation(200, 200); fontDialog.setResizable(false); fontDialog.setVisible(true); }// 构造函数结束 // 更新示例显示的字体和风格大小等 public void updateSample() { Font sampleFont = new Font(tfFont.getText(), fontStyleConst[listStyle.getSelectedIndex()], Integer.parseInt(tfSize.getText())); sample.setFont(sampleFont); }// End method updateSample // 设置文本编辑区的字体 public void actionPerformed(ActionEvent e) { if (e.getSource() == fontOkButton) { Font tempFont = new Font(tfFont.getText(), fontStyleConst[listStyle.getSelectedIndex()], Integer.parseInt(tfSize.getText())); Text.setFont(tempFont); fontDialog.dispose(); } }// End method actionPerformed }/* End of class MyFont */ public void removeUpdate(DocumentEvent e) { mEdit_Undo.setEnabled(true); popupMenu_Undo.setEnabled(true); undoButton.setEnabled(true); } public void insertUpdate(DocumentEvent e) { mEdit_Undo.setEnabled(true); popupMenu_Undo.setEnabled(true); undoButton.setEnabled(true); } public void changedUpdate(DocumentEvent e) { mEdit_Undo.setEnabled(true); popupMenu_Undo.setEnabled(true); undoButton.setEnabled(true); } // End of DocumentListener // 实现了接口UndoableListener的类UndoHandler class UndoHandler implements UndoableEditListener { public void undoableEditHappened(UndoableEditEvent uee) { undo.addEdit(uee.getEdit()); } } public static void main(String s[]) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException { // UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); Text = new JTextArea(); Text.setDragEnabled(true); // 支持自动拖放 Text.setTransferHandler(new FileTransferHandler(Text)); new Notepad4(); } } class FileTransferHandler extends TransferHandler { JTextArea Text; public FileTransferHandler(JTextArea Text) { this.Text = Text; } public boolean importData(JComponent c, Transferable t) { try { List files = (List) t.getTransferData(DataFlavor.javaFileListFlavor); addFilesToFilePathList(files); return true; } catch (UnsupportedFlavorException ufe) { ufe.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } public boolean canImport(JComponent c, DataFlavor[] flavors) { for (int i = 0; i < flavors.length; i++) { if (DataFlavor.javaFileListFlavor.equals(flavors[i])) { return true; } } return false; } private void addFilesToFilePathList(List files) { for (Iterator iter = files.iterator(); iter.hasNext();) { File file = (File) iter.next(); String str = null; try { FileReader fr = new FileReader(file); BufferedReader bfr = new BufferedReader(fr); Text.setText(""); while ((str = bfr.readLine()) != null) { Text.append(str + "/15/12"); } } catch (Exception b) { } } } } JAVA记事本源代码 import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; import java.util.*; //Date needed import java.io.PrintWriter; public class NotePad extends JFrame { JTextArea jta; class newl implements ActionListener { public void actionPerformed(ActionEvent e) { jta.setText(""); } } class openl implements ActionListener { public void actionPerformed(ActionEvent e) { JFileChooser jf=new JFileChooser(); jf.showOpenDialog(NotePad.this); } } //保存文件的监听 class savel implements ActionListener { public void actionPerformed(ActionEvent e) { JFileChooser jf = new JFileChooser(); jf.showSaveDialog(NotePad.this); } } //打印的监听 ? class printl implements ActionListener { public void actionPerformed(ActionEvent e) { // PrintWriter p = new PrintWriter(NotePad.this); } } //退出记事本的监听 class exitl implements ActionListener { public void actionPerformed(ActionEvent e) { System.exit(0);//退出 } } //拷贝的监听 class copyl implements ActionListener { public void actionPerformed(ActionEvent e) { jta.copy(); } } //粘贴的监听 class pastel implements ActionListener { public void actionPerformed(ActionEvent e) { jta.paste(); } } //剪切的监听 class cutl implements ActionListener { public void actionPerformed(ActionEvent e) { jta.cut(); } } //查找的监听 //添加日期的监听 class datel implements ActionListener { public void actionPerformed(ActionEvent e) { Date d=new Date(); jta.append(d.toString()); } } //构造函数 public NotePad() { jta=new JTextArea("",24,40); JScrollPane jsp=new JScrollPane(jta); JMenuBar jmb=new JMenuBar(); JMenu mFile=new JMenu("File"); JMenu mEdit=new JMenu("Edit"); JMenuItem mNew=new JMenuItem("New",KeyEvent.VK_N); mNew.addActionListener(new newl()); mFile.add(mNew); JMenuItem mOpen=new JMenuItem("Open",KeyEvent.VK_O); mOpen.addActionListener(new openl()); mFile.add(mOpen); JMenuItem mSave=new JMenuItem("Save"); mSave.addActionListener(new savel()); mFile.add(mSave); mFile.addSeparator(); //添加分割线 JMenuItem mPrint = new JMenuItem("Print"); mPrint.addActionListener(new printl()); mFile.add(mPrint); mFile.addSeparator(); //添加分割线 JMenuItem mExit=new JMenuItem("Exit"); mExit.addActionListener(new exitl()); mFile.add(mExit); mFile.setMnemonic(KeyEvent.VK_F); //编辑菜单的子菜单的处理 JMenuItem jmi; jmi=new JMenuItem("Copy"); jmi.addActionListener(new copyl()); mEdit.add(jmi); jmi=new JMenuItem("Cut"); jmi.addActionListener(new cutl()); mEdit.add(jmi); jmi=new JMenuItem("Paste"); jmi.addActionListener(new pastel()); mEdit.add(jmi); mEdit.addSeparator(); //添加分割线 jmi=new JMenuItem("Find"); mEdit.add(jmi); jmi=new JMenuItem("FindNext"); mEdit.add(jmi); mEdit.addSeparator(); jmi=new JMenuItem("Select All"); mEdit.add(jmi); jmi=new JMenuItem("Date/Time"); jmi.addActionListener(new datel()); mEdit.add(jmi); jmb.add(mFile); jmb.add(mEdit); this.setJMenuBar(jmb); this.getContentPane().add(jsp); this.setSize(200,200); this.setVisible(true); } //主函数,程序入口点 public static void main(String s[]) { new NotePad(); } } 2008-07-30 10:23 闲着没事写的记事本代码,基本功能都有,还有鼠标右键粘贴等。 package day10.notepad; import java.awt.FileDialog; import java.awt.FlowLayout; import java.awt.event.*; import javax.swing.*; public class TestNotepad implements ActionListener, MouseListener{ private int set = 0; //查找位置 private JFrame jf = new JFrame("Notepad"); //面板 private JTextArea jta = new JTextArea(20, 30); //文本区 JScrollPane jsp = new JScrollPane(jta); //滚动条 private JTextField jtf = new JTextField(10); //单行文本区 private JTextField jtft = new JTextField(10); //单行文本区 //接收发送过来的请求,并做相应处理 public void actionPerformed(ActionEvent e) { String comm = e.getActionCommand(); if (comm.equals("新建...")) { new TestNotepad(); } if (comm.equals("保存")) { System.out.println("保存"); JFileChooser jc = new JFileChooser(); jc.setSize(300,300); jc.setVisible(true); } if (comm.equals("打开...")) { FileDialog fd = new FileDialog(jf, "打开..."); fd.getFilenameFilter(); fd.setVisible(true); fd.setLocation(400, 200); fd.setResizable(false); } if (comm.equals("退出")) { System.exit(0); } if (comm.equals("撤销")) { } if (comm.equals("剪切")) { jta.cut(); } if (comm.equals("复制")) { jta.copy(); } if (comm.equals("粘贴")) { jta.paste(); } if (comm.equals("删除")) { jta.cut(); } if ("查找...".equals(comm) || "替换...".equals(comm)) { JDialog jd = new JDialog(jf, comm); String label = comm.substring(0, 2); JButton jb = new JButton(label); jb.addActionListener(this); jd.setLayout(new FlowLayout()); jd.add(jtf); if ("替换...".equals(comm)) { JLabel jlt = new JLabel(">"); jd.add(jlt); jd.add(jtft); } jd.add(jb); if ("替换...".equals(comm)) { JButton jball = new JButton("替换全部"); jball.addActionListener(this); jd.add(jball); } jd.pack(); jd.setResizable(false); jd.setLocation(400, 240); jd.setVisible(true); } if (comm.equals("全选")) { jta.selectAll(); } if (comm.equals("关于...")) { JDialog jd = new JDialog(jf, "关于我..."); jd.setLayout(new FlowLayout()); JLabel jl = new JLabel("制作者: 李 博 "); JLabel j2 = new JLabel("Email: amelody@163.com"); jd.add(jl); jd.add(j2); jd.setSize(180, 100); jd.setResizable(false); jd.setLocation(400, 240); jd.setVisible(true); } if (comm.equals("查找")) { String str = jtf.getText(); String strall = jta.getText(); int n = strall.indexOf(str, set); if (n != -1) { set = n + 1; jta.setSelectionStart(n); jta.setSelectionEnd(n + str.length()); } } if (comm.equals("替换") || comm.equals("替换全部")) { String str = jtf.getText(); String strall = jta.getText(); if (comm.equals("替换全部")) { int n1 = 0; while (true) { set = strall.indexOf(str, n1); if (set == -1) break; n1 = set + 1; jta.setSelectionStart(set); jta.setSelectionEnd(set + str.length()); jta.replaceSelection(jtft.getText()); } set = 0; } int n = strall.indexOf(str, set); if (n == -1) { set = 0; } else { set = n + 1; jta.setSelectionStart(n); jta.setSelectionEnd(n + str.length()); jta.replaceSelection(jtft.getText()); } } } public TestNotepad() { jta.setLineWrap(true); jta.addMouseListener(this); jf.add(jsp); JMenuBar jmb = new JMenuBar(); JMenu jm1 = new JMenu("文件"); String[] label1 = { "新建...", "打开...", "保存", "另存...", "退出" }; JMenuItem[] jmi1 = new JMenuItem[label1.length]; for (int i = 0; i < jmi1.length; i++) { jmi1[i] = new JMenuItem(label1[i]); jm1.add(jmi1[i]); jmi1[i].addActionListener(this); } jm1.insertSeparator(1); jm1.insertSeparator(3); jm1.insertSeparator(6); JMenu jm2 = new JMenu("编辑"); String[] label2 = { "撤销", "剪切", "复制", "粘贴", "删除", "查找...", "替换...", "全选" }; JMenuItem[] jmi2 = new JMenuItem[label2.length]; for (int i = 0; i < jmi2.length; i++) { jmi2[i] = new JMenuItem(label2[i]); jm2.add(jmi2[i]); jmi2[i].addActionListener(this); } jm2.insertSeparator(1); jm2.insertSeparator(5); jm2.insertSeparator(7); jm2.insertSeparator(10); JMenu jm3 = new JMenu("帮助"); JMenuItem jmi3 = new JMenuItem("关于..."); jm3.add(jmi3); jmi3.addActionListener(this); jmb.add(jm1); jmb.add(jm2); jmb.add(jm3); jf.setJMenuBar(jmb); jf.pack(); jf.setLocation(300, 200); jf.setVisible(true); //jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { jf.removeAll(); jf.dispose(); } }); } public static void main(String[] args) { new TestNotepad(); } //鼠标右键功能 public void mouseClicked(MouseEvent e) { JPopupMenu pp = new JPopupMenu(); if (e.getButton() == 3) { JMenuItem jmi1,jmi2,jmi3,jmi4; pp.add(jmi1 = new JMenuItem("剪切")); pp.add(jmi2 = new JMenuItem("复制")); pp.add(jmi3 = new JMenuItem("粘贴")); pp.addSeparator(); pp.add(jmi4 = new JMenuItem("全选")); jmi1.addActionListener(this); jmi2.addActionListener(this); jmi3.addActionListener(this); jmi4.addActionListener(this); pp.pack(); jf.add(pp); pp.setVisible(true); pp.show(e.getComponent(), e.getX(), e.getY()); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } } Java记事本和界面收藏代码:(未完成,可初步使用) package proe; import java.awt.*; import javax.swing.*; /** *

Title: 程序编辑器

*

Description: 增强的文本编辑程序

*

Copyright: Copyright (c) 2005

*

Company:

*@author 红色彼岸 *@version 0.1 */ public class ProE{ //定义编辑器的窗体 private ProEFrame proEWindow; //定义编辑器程序本身 private static ProE proEApp; /** *应用程序的开始点。 *@param args String[] */ public static void main(String[] args) { proEApp = new ProE(); proEApp.init(); } private void init() { //初始化窗体 proEWindow = new ProEFrame("程序编辑器"); Toolkit toolkit = proEWindow.getToolkit(); Dimension screenSize = toolkit.getScreenSize(); proEWindow.setBounds(0, 0, (int)screenSize.getWidth()/2, (int)screenSize.getHeight()/2); proEWindow.setVisible(true); } } ==================================================================================== package proe; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; /** *

Title: 程序编辑器

*

Description: 增强的文本编辑程序

*

Copyright: Copyright (c) 2005

*

Company:

*@author 红色彼岸 *@version 0.1 */ class ProEFrame extends JFrame{ private JFileChooser fileChooser = new JFileChooser(); private JMenuBar menuBar; private JMenu file, edit, format, help; private JMenuItem newItem, openItem, saveItem, saveAsItem, pageSetItem, printItem, exitItem; private JMenuItem undoItem, cutItem, copyItem, pasteItem, deleteItem, findItem, findNextItem, replaceItem, goToLineItem, selectAllItem, timeItem; private JMenuItem autoNextLineItem, fontItem; private JMenuItem helpItem, aboutItem; private JTextArea textArea; private JScrollPane scrollPane; private final int TAB_SIZE = 4; private File fileName; private boolean firstSave = true; public ProEFrame(String title) { //设置窗体的标题栏和默认关闭操作 super(title); setDefaultCloseOperation(DISPOSE_ON_CLOSE); //设置菜单栏和菜单的内容 menuBar = new JMenuBar(); file = new JMenu("文件(F)"); edit = new JMenu("编辑(E)"); format = new JMenu("格式(O)"); help = new JMenu("帮助(H)"); setQuickKey(file, 'F'); setQuickKey(edit, 'E'); setQuickKey(format, 'O'); setQuickKey(help, 'H'); newItem = new JMenuItem("新建(N)"); openItem = new JMenuItem("打开(O)..."); saveItem = new JMenuItem("保存(S)"); saveAsItem = new JMenuItem("另存为..."); pageSetItem = new JMenuItem("页面设置(U)..."); printItem = new JMenuItem("打印(P)..."); exitItem = new JMenuItem("退出"); setQuickKey(newItem, 'N'); setQuickKey(openItem, 'O'); setQuickKey(saveItem, 'S'); setQuickKey(pageSetItem, 'U'); setQuickKey(printItem, 'P'); file.add(newItem); file.add(openItem); file.add(saveItem); file.add(saveAsItem); file.addSeparator(); file.add(pageSetItem); file.add(printItem); file.addSeparator(); file.add(exitItem); undoItem = new JMenuItem("撤销(Z)"); cutItem = new JMenuItem("剪切(X)"); copyItem = new JMenuItem("复制(C)"); pasteItem = new JMenuItem("粘贴(V)"); deleteItem = new JMenuItem("删除"); findItem = new JMenuItem("查找(F)..."); findNextItem = new JMenuItem("查找下一个"); replaceItem = new JMenuItem("替换(R)..."); goToLineItem = new JMenuItem("转到(G)..."); selectAllItem = new JMenuItem("全选(A)"); timeItem = new JMenuItem("时间/日期"); setQuickKey(undoItem, 'Z'); setQuickKey(cutItem, 'X'); setQuickKey(copyItem, 'C'); setQuickKey(pasteItem, 'V'); setQuickKey(findItem, 'F'); setQuickKey(replaceItem, 'R'); setQuickKey(goToLineItem, 'G'); setQuickKey(selectAllItem, 'A'); edit.add(undoItem); edit.addSeparator(); edit.add(cutItem); edit.add(copyItem); edit.add(pasteItem); edit.add(deleteItem); edit.addSeparator(); edit.add(findItem); edit.add(findNextItem); edit.add(replaceItem); edit.add(goToLineItem); edit.addSeparator(); edit.add(selectAllItem); edit.add(timeItem); autoNextLineItem = new JMenuItem("自动换行(W)"); fontItem = new JMenuItem("字体..."); setQuickKey(autoNextLineItem, 'W'); format.add(autoNextLineItem); format.add(fontItem); helpItem = new JMenuItem("帮助主题(H)"); aboutItem = new JMenuItem("关于ProE"); setQuickKey(helpItem, 'H'); help.add(helpItem); help.add(aboutItem); menuBar.add(file); menuBar.add(edit); menuBar.add(format); menuBar.add(help); setJMenuBar(menuBar); textArea = new JTextArea(); textArea.setTabSize(TAB_SIZE); scrollPane = new JScrollPane(textArea); this.getContentPane().add(scrollPane, BorderLayout.CENTER); //测试用的方法 MenuItemEventHandler menuItemHandler = new MenuItemEventHandler(); newItem.addActionListener(menuItemHandler); openItem.addActionListener(menuItemHandler); saveItem.addActionListener(menuItemHandler); saveAsItem.addActionListener(menuItemHandler); pageSetItem.addActionListener(menuItemHandler); printItem.addActionListener(menuItemHandler); exitItem.addActionListener(menuItemHandler); undoItem.addActionListener(menuItemHandler); cutItem.addActionListener(menuItemHandler); copyItem.addActionListener(menuItemHandler); pasteItem.addActionListener(menuItemHandler); deleteItem.addActionListener(menuItemHandler); findItem.addActionListener(menuItemHandler); findNextItem.addActionListener(menuItemHandler); replaceItem.addActionListener(menuItemHandler); goToLineItem.addActionListener(menuItemHandler); selectAllItem.addActionListener(menuItemHandler); timeItem.addActionListener(menuItemHandler); autoNextLineItem.addActionListener(menuItemHandler); fontItem.addActionListener(menuItemHandler); helpItem.addActionListener(menuItemHandler); aboutItem.addActionListener(menuItemHandler); } //辅助方法:为菜单或者菜单项设定快捷键 private void setQuickKey(AbstractButton button, char quickKey) { String type = button.getClass().getName(); if(type.endsWith("JMenu")) button.setMnemonic(quickKey); else if(type.endsWith("JMenuItem")) { JMenuItem menuItem = (JMenuItem)button; menuItem.setAccelerator(KeyStroke.getKeyStroke(quickKey, InputEvent.CTRL_MASK)); } } //内部方法:响应菜单事件 private void newPerformed() { savePerformed(); textArea.setText(""); } private void openPerformed() { BufferedReader input = null; String text; int ret = fileChooser.showOpenDialog(this); if(ret != JFileChooser.APPROVE_OPTION) return; fileName = fileChooser.getSelectedFile(); if(fileName.exists() && fileName.canRead()) { setTitle("程序编辑器: " + fileName.getName()); textArea.setText(""); try{ input = new BufferedReader(new FileReader(fileName)); while((text = input.readLine()) != null) textArea.append(text + "/n"); input.close(); } catch(IOException e) { JOptionPane.showMessageDialog(this, "文件打开错误,没有打开"); } finally { input = null; } } } private void savePerformed() { PrintWriter output = null; if(firstSave == true) { saveAsPerformed(); firstSave = false; } else { try{ output = new PrintWriter(new FileWriter(fileName)); output.write(textArea.getText()); } catch(IOException e) { JOptionPane.showMessageDialog(this, "文件写入错误,没有保存"); } finally { output.close(); output = null; } } } private void saveAsPerformed() { PrintWriter output = null; int ret = fileChooser.showSaveDialog(this); if(ret != JFileChooser.APPROVE_OPTION) return; fileName = fileChooser.getSelectedFile(); setTitle("程序编辑器: " + fileName.getName()); try{ output = new PrintWriter(new FileWriter(fileName)); output.write(textArea.getText()); } catch(IOException e){ JOptionPane.showMessageDialog(this, "文件写入错误,没有保存"); } finally{ output.close(); output = null; } } private void pageSetPerformed() { System.out.println("显示页面设置对话框"); } private void printPerformed() { System.out.println("显示打印对话框"); } private void exitPerformed() { savePerformed(); dispose(); } private void undoPerformed() { System.out.println("撤销"); } private void cutPerformed() { System.out.println("剪切"); } private void copyPerformed() { System.out.println("复制"); } private void pastePerformed() { System.out.println("粘贴"); } private void deletePerformed() { System.out.println("删除"); } private void findPerformed() { System.out.println("查找"); } private void findNextPerformed() { System.out.println("查找下一个"); } private void replacePerformed() { System.out.println("替换"); } private void goToLinePerformed() { System.out.println("转到"); } private void selectAllPerformed() { System.out.println("全选"); } private void timePerformed() { System.out.println("时间/日期"); } private void autoNextLinePerformed() { System.out.println("自动换行"); } private void fontPerformed() { System.out.println("字体"); } private void helpPerformed() { System.out.println("帮助主题"); } private void aboutPerformed() { JOptionPane.showMessageDialog(this, "简陋的编辑器"); } /** *

Title:

*

Description: 处理菜单出发的事件

*

Copyright: Copyright (c) 2005

*

Company:

*@author 崔海成 *@version 0.1 */ class MenuItemEventHandler implements ActionListener{ public void actionPerformed(ActionEvent e) { JMenuItem item = (JMenuItem)e.getSource(); if(item == newItem) newPerformed(); else if(item == openItem) openPerformed(); else if(item == saveItem) savePerformed(); else if(item == saveAsItem) saveAsPerformed(); else if(item == pageSetItem) pageSetPerformed(); else if(item == printItem) printPerformed(); else if(item == exitItem) exitPerformed(); else if(item == undoItem) undoPerformed(); else if(item == cutItem) cutPerformed(); else if(item == copyItem) copyPerformed(); else if(item == pasteItem) pastePerformed(); else if(item == deleteItem) deletePerformed(); else if(item == findItem) findPerformed(); else if(item == findNextItem) findNextPerformed(); else if(item == replaceItem) replacePerformed(); else if(item == goToLineItem) goToLinePerformed(); else if(item == selectAllItem) selectAllPerformed(); else if(item == timeItem) timePerformed(); else if(item == autoNextLineItem) autoNextLinePerformed(); else if(item == fontItem) fontPerformed(); else if(item == helpItem) helpPerformed(); else if(item == aboutItem) aboutPerformed(); } } } 今天准备分析一个java的记事本收藏先附上源码: import java.lang.*; import java.awt.*; import java.io.*; import java.awt.datatransfer.*; import java.awt.event.*; public class EditorFrame extends Frame implements ActionListener { TextArea textArea = new TextArea(); MenuBar menuBar = new MenuBar(); Menu fileMenu = new Menu("File"); MenuItem newItem = new MenuItem("New"); MenuItem openItem = new MenuItem("Open"); MenuItem saveItem = new MenuItem("Save"); MenuItem saveAsItem = new MenuItem("Save As"); MenuItem exitItem = new MenuItem("Exit"); Menu editMenu = new Menu("Edit"); MenuItem selectItem = new MenuItem("Select All"); MenuItem copyItem = new MenuItem("Copy"); MenuItem cutItem = new MenuItem("Cut"); MenuItem pasteItem = new MenuItem("Paste"); String fileName = null; Toolkit toolKit=Toolkit.getDefaultToolkit();//? Clipboard clipBoard=toolKit.getSystemClipboard();//? private FileDialog openFileDialog= new FileDialog(this,"Open File",FileDialog.LOAD); private FileDialog saveAsFileDialog= new FileDialog(this,"Save File As",FileDialog.SAVE); public EditorFrame( ) // EditorFrame initialzation { setTitle("NotePad"); setFont(new Font("Times New Roman",Font.PLAIN,12)); setBackground(Color.white); setSize(400,300); fileMenu.add(newItem); fileMenu.add(openItem); fileMenu.addSeparator(); fileMenu.add(saveItem); fileMenu.add(saveAsItem); fileMenu.addSeparator(); fileMenu.add(exitItem); editMenu.add(selectItem); editMenu.addSeparator(); editMenu.add(copyItem); editMenu.add(cutItem); editMenu.add(pasteItem); menuBar.add(fileMenu); menuBar.add(editMenu); setMenuBar(menuBar);//? add(textArea); addWindowListener(new WindowAdapter()//添加窗体的关闭事件 { public void windowClosing(WindowEvent e) { System.exit(0); } } ); newItem.addActionListener(this); openItem.addActionListener(this); saveItem.addActionListener(this); saveAsItem.addActionListener(this); exitItem.addActionListener(this); selectItem.addActionListener(this); copyItem.addActionListener(this); cutItem.addActionListener(this); pasteItem.addActionListener(this); } public void actionPerformed(ActionEvent e) { Object eventSource = e.getSource();// if(eventSource == newItem) { textArea.setText(""); } else if(eventSource == openItem) { openFileDialog.show(); fileName = openFileDialog.getDirectory()+openFileDialog.getFile(); if(fileName != null) readFile(fileName); } else if (eventSource == saveItem) { if(fileName != null) writeFile(fileName); } else if(eventSource == saveAsItem) { saveAsFileDialog.show(); fileName = saveAsFileDialog.getDirectory()+saveAsFileDialog.getFile(); if (fileName!= null) writeFile(fileName); } else if(eventSource == selectItem) { textArea.selectAll(); } else if(eventSource == copyItem) { String text=textArea.getSelectedText(); StringSelection selection=new StringSelection(text); clipBoard.setContents(selection,null); } else if(eventSource == cutItem) { String text=textArea.getSelectedText(); StringSelection selection=new StringSelection(text); clipBoard.setContents(selection,null); textArea.replaceRange("",textArea.getSelectionStart(),textArea.getSelectionEnd()); } else if(eventSource == pasteItem) { Transferable contents=clipBoard.getContents(this); if(contents==null) return; String text; text=""; try{ text=(String)contents.getTransferData(DataFlavor.stringFlavor); }catch(Exception exception){ } textArea.replaceRange(text,textArea.getSelectionStart(),textArea.getSelectionEnd()); } else if(eventSource == exitItem) { System.exit(0); } } public void readFile(String fileName) { try{ File file = new File(fileName); FileReader readIn = new FileReader(file); int size = (int)file.length(); int charsRead = 0; char[] content = new char[size]; while(readIn.ready()) charsRead += readIn.read(content, charsRead, size - charsRead); readIn.close(); textArea.setText(new String(content, 0, charsRead)); }catch(IOException e) { System.out.println("Error opening file"); } } public void writeFile(String fileName) { try{ File file = new File (fileName); FileWriter writeOut = new FileWriter(file); writeOut.write(textArea.getText()); writeOut.close(); }catch(IOException e) { System.out.println("Error writing file"); } } public static void main(String[] args) { Frame frame = new EditorFrame(); frame.show(); } } 本程序的主要按如下思路编写的:1初始化一个编辑框的类,在其中添加需要用到的控件.2在编辑框中添加各个需要用到的各个组件,事实上在第一步中只是一个组件声明,在这一步中才为组件分配内存空间.在本步中实现窗体的关闭功能.3添加各个组件的事件.实现各自的功能.4实现编辑本的的输入输出功能.5设立mainmethord. MenuBar:是一个菜单条,但是不能直接用,先离开了,以后会继续写 java写的记事本收藏其实JAVA自带的例子就也有用JAVA写的记事本,在demo/jfc目录下。 import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.net.*; import java.awt.Font; import java.awt.print.*; import javax.swing.text.*; import java.awt.datatransfer.*; public class Mynote extends JFrame { public boolean changed; //控制文本域内文字是否改变情况。 public JTextArea jta=new JTextArea("", 60,60); public JScrollPane jsp=new JScrollPane(jta); public JMenuBar jmb; public JMenu jm,editjm,setjm,viewjm,helpjm; public JMenuItem newjmi,openjmi,savejmi,saveasjmi,printjmi,exitjmi; public JSeparator js1=new JSeparator(); public JSeparator js2=new JSeparator(); public ActionListener al=new A(); public String fileName=""; //定义保存的文件名 public JMenuItem copyjmi,pastejmi,cutjmi,findjmi,findnjmi,deletejmi,selectalljmi,undojmi; public JMenuItem fontjmi,fjmi,bjmi; //font设置字体样式 public JMenuItem toolsjmi; public JMenuItem aboutjmi; public JSeparator js3=new JSeparator(); public JSeparator js4=new JSeparator(); public JToolBar jtb; public String quick[]=new String[]{"new","open","save","saveas","delete","copy","paste","cut","selectall"}; PrinterJob prtMe = PrinterJob.getPrinterJob(); public Mynote() { this.setTitle("我的记事本"); this.setSize(new Dimension(400,400)); jta.getDocument().addDocumentListener(new DocumentListener() { public void insertUpdate(DocumentEvent e) { changed=true; } public void removeUpdate(DocumentEvent e) { changed=true; } public void changedUpdate(DocumentEvent e) { changed=true; } } ); jta.setBackground(Color.white); jta.setForeground(Color.black); jta.setFont(new Font("",Font.BOLD,12)); jsp.setViewportView(jta); this.getContentPane().add(jsp,BorderLayout.CENTER); this.Compose(); this.setJMenuBar(jmb); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if(changed==true) { int n; Object[] option={"是","否"}; n=JOptionPane.showOptionDialog(null, "你的文件还没有保存,请保存后关闭!", "请保存", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, option, option[0]); switch(n) { case JOptionPane.YES_OPTION: doSave(fileName); break; case JOptionPane.NO_OPTION: break; default: break; } } System.exit(0); } }); } public void Compose() { //文件菜单布局newjmi,openjmi,savejmi,saveasjmi,printjmi,exitjmi jmb=new JMenuBar(); jm=new JMenu(); editjm=new JMenu(); newjmi=new JMenuItem(); openjmi=new JMenuItem(); savejmi=new JMenuItem(); saveasjmi=new JMenuItem(); printjmi=new JMenuItem(); exitjmi=new JMenuItem(); js1=new JSeparator(); js2=new JSeparator(); jm.setMnemonic(KeyEvent.VK_F);//定义快捷键 jm.setText("文件"); newjmi.setMnemonic(KeyEvent.VK_N); newjmi.setText("新建"); newjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); newjmi.addActionListener(al); jm.add(newjmi); jm.add(js1);//or:jm.addSeparator(); openjmi.setMnemonic(KeyEvent.VK_O); openjmi.setText("打开"); openjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); openjmi.addActionListener(al); jm.add(openjmi); savejmi.setMnemonic(KeyEvent.VK_S); savejmi.setText("保存"); savejmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); savejmi.addActionListener(al); jm.add(savejmi); saveasjmi.setMnemonic(KeyEvent.VK_A); saveasjmi.setText("另存为"); saveasjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); saveasjmi.addActionListener(al); jm.add(saveasjmi); printjmi.setMnemonic(KeyEvent.VK_A); printjmi.setText("打印"); printjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK)); printjmi.addActionListener(al); jm.add(printjmi); jm.add(js2); exitjmi.setMnemonic(KeyEvent.VK_X); exitjmi.setText("退出"); exitjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); exitjmi.addActionListener(al); jm.add(exitjmi); //文件菜单设置结束。copyjmi,pastejmi,cutjmi,findjmi,findnjmi,deletejmi,selectalljmi,undojmi; editjm.setText("编辑"); editjm.setMnemonic(KeyEvent.VK_E); copyjmi=new JMenuItem(); pastejmi=new JMenuItem(); cutjmi=new JMenuItem(); findjmi=new JMenuItem(); findnjmi=new JMenuItem(); deletejmi=new JMenuItem(); selectalljmi=new JMenuItem(); undojmi=new JMenuItem(); copyjmi.setText("复制"); copyjmi.setMnemonic(KeyEvent.VK_C); copyjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); copyjmi.addActionListener(al); editjm.add(copyjmi); pastejmi.setText("粘贴"); pastejmi.setMnemonic(KeyEvent.VK_P); pastejmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK)); pastejmi.addActionListener(al); editjm.add(pastejmi); cutjmi.setText("剪切"); cutjmi.setMnemonic(KeyEvent.VK_X); cutjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); cutjmi.addActionListener(al); editjm.add(cutjmi); editjm.add(js3); findjmi.setText("查找"); findjmi.setMnemonic(KeyEvent.VK_F); findjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK)); findjmi.addActionListener(al); findnjmi.setText("查找下一个"); findnjmi.addActionListener(al); editjm.add(findjmi); editjm.add(findnjmi); editjm.addSeparator(); deletejmi.setText(" 删除"); deletejmi.setMnemonic(KeyEvent.VK_D); deletejmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,InputEvent.CTRL_MASK)); deletejmi.addActionListener(new delete()); selectalljmi.setText("全选"); selectalljmi.setMnemonic(KeyEvent.VK_S); selectalljmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); selectalljmi.addActionListener(new selectAllL()); undojmi.setText("撤消"); undojmi.setMnemonic(KeyEvent.VK_U); undojmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK)); undojmi.addActionListener(al); editjm.add(deletejmi); editjm.add(selectalljmi); editjm.add(undojmi);//编辑菜单设置结束 setjm=new JMenu(); setjm.setText("设置"); setjm.setMnemonic(KeyEvent.VK_S); fjmi=new JMenuItem(); fjmi.setText("字体颜色..."); fjmi.setMnemonic(KeyEvent.VK_F); fjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M,InputEvent.CTRL_MASK)); fjmi.addActionListener(al); fontjmi=new JMenuItem(); fontjmi.setText("字体样式..."); fontjmi.setMnemonic(KeyEvent.VK_I); fontjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I,InputEvent.CTRL_MASK)); fontjmi.addActionListener(al); bjmi=new JMenuItem(); bjmi.setText("背景颜色..."); bjmi.setMnemonic(KeyEvent.VK_B); bjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,InputEvent.CTRL_MASK)); bjmi.addActionListener(al); setjm.add(fjmi); setjm.add(fontjmi); setjm.add(bjmi); viewjm=new JMenu(); viewjm.setText("视图"); viewjm.setMnemonic(KeyEvent.VK_W); toolsjmi=new JMenuItem(); toolsjmi.setText("工具栏"); toolsjmi.setMnemonic(KeyEvent.VK_T); toolsjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK)); toolsjmi.addActionListener(al); viewjm.add(toolsjmi); helpjm=new JMenu(); helpjm.setText("帮助"); helpjm.setMnemonic(KeyEvent.VK_H); aboutjmi=new JMenuItem(); aboutjmi.setText("关于"); aboutjmi.setMnemonic(KeyEvent.VK_A); aboutjmi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); aboutjmi.addActionListener(al); helpjm.add(aboutjmi); jmb.add(jm); jmb.add(editjm); jmb.add(setjm); jmb.add(viewjm); jmb.add(helpjm); jtb=new JToolBar(); jtb.setFloatable(false); addButtons(); this.getContentPane().add(jtb,BorderLayout.PAGE_START); definePopupMenu(); } public void definePopupMenu() { JPopupMenu popupjm=new JPopupMenu(); MouseListener ml=new popuplistener(popupjm); JMenuItem jmi=null; jmi=new JMenuItem("新建"); jmi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { newactionlistener(); } }); popupjm.add(jmi); popupjm.addSeparator(); jmi=new JMenuItem("打开"); jmi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openactionlistener(); } }); popupjm.add(jmi); jmi=new JMenuItem("保存"); jmi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { doSave(fileName); } }); popupjm.add(jmi); jmi=new JMenuItem("另保存"); jmi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { doSaveAs(); } }); popupjm.add(jmi); popupjm.addSeparator(); jmi=new JMenuItem("查找"); jmi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new Finder(Mynote.this,jta).show(); } }); popupjm.add(jmi); popupjm.addSeparator(); jmi=new JMenuItem("复制"); jmi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.copy(); } }); popupjm.add(jmi); jmi=new JMenuItem("粘贴"); jmi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.paste(); } }); popupjm.add(jmi); jmi=new JMenuItem("剪切"); jmi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.cut(); } }); popupjm.add(jmi); popupjm.addSeparator(); jmi=new JMenuItem("文字颜色"); jmi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Color newColor=JColorChooser.showDialog(Mynote.this,"请选择文字颜色",jta.getForeground()); jta.setForeground(newColor); } }); popupjm.add(jmi); jmi=new JMenuItem("背景颜色"); jmi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Color newColor=JColorChooser.showDialog(Mynote.this,"请选择背景颜色",jta.getBackground()); jta.setBackground(newColor); } }); popupjm.add(jmi); jta.addMouseListener(ml); } class popuplistener extends MouseAdapter { JPopupMenu popupjm; public popuplistener(JPopupMenu popupjm) { this.popupjm=popupjm; } public void mousePressed(MouseEvent e) { executeTrigger(e); } public void mouseReleased(MouseEvent e) { executeTrigger(e); } public void executeTrigger(MouseEvent e) { if(e.isPopupTrigger()) popupjm.show(e.getComponent(),e.getX(),e.getY()); } } public void addButtons() { JButton jb[]=new JButton[9]; { jb[0]=new JButton(); addListeners(jb[0],quick[0]); jb[0].setToolTipText(quick[0]); jb[0].setIcon(createImage("0.gif")); jtb.add(jb[0]); } {jb[1]=new JButton(); addListeners(jb[1],quick[1]); jb[1].setToolTipText(quick[1]); jb[1].setIcon(createImage("1.gif")); jtb.add(jb[1]); } { jb[2]=new JButton(); addListeners(jb[2],quick[2]); jb[2].setToolTipText(quick[2]); jb[2].setIcon(createImage("2.gif")); jtb.add(jb[2]); } { jb[3]=new JButton(); addListeners(jb[3],quick[3]); jb[3].setToolTipText(quick[3]); jb[3].setIcon(createImage("3.gif")); jtb.add(jb[3]); } { jb[4]=new JButton(); addListeners(jb[4],quick[4]); jb[4].setToolTipText(quick[4]); jb[4].setIcon(createImage("4.gif")); jtb.add(jb[4]); } { jb[5]=new JButton(); addListeners(jb[5],quick[5]); jb[5].setToolTipText(quick[5]); jb[5].setIcon(createImage("5.gif")); jtb.add(jb[5]); } { jb[6]=new JButton(); addListeners(jb[6],quick[6]); jb[6].setToolTipText(quick[6]); jb[6].setIcon(createImage("6.gif")); jtb.add(jb[6]); } { jb[7]=new JButton(); addListeners(jb[7],quick[7]); jb[7].setToolTipText(quick[7]); jb[7].setIcon(createImage("7.gif")); jtb.add(jb[7]); } { jb[8]=new JButton(); addListeners(jb[8],quick[8]); jb[8].setToolTipText(quick[8]); jb[8].setIcon(createImage("8.gif")); jtb.add(jb[8]); } } public void addListeners(JButton jb,String actionCommand) { if(actionCommand.equals(quick[0])) { jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { newactionlistener(); } }); } else if(actionCommand.equals(quick[1])) { jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openactionlistener(); } }); } else if(actionCommand.equals(quick[2])) { jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { doSave(fileName); } }); } else if(actionCommand.equals(quick[3])) { jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { doSaveAs(); } }); } else if(actionCommand.equals(quick[4])) { jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.copy(); } }); } else if(actionCommand.equals(quick[5])) { jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.paste(); } }); } else if(actionCommand.equals(quick[6])) { jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.cut(); } }); } else if(actionCommand.equals(quick[7])) { jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.cut(); } }); } else if(actionCommand.equals(quick[8])) { jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.selectAll(); } }); } else { jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.cut(); } }); } } public ImageIcon createImage(String str) { java.net.URL url=Mynote.class.getResource(str); if(url==null) return null; else return new ImageIcon(url); } public static void main(String args[]) { new Mynote().show(); } public void newactionlistener() { if(changed==true) { int n; Object option[]={"YES","NO","CANCEL"}; n=JOptionPane.showOptionDialog(null, "你的文件还没有保存呢,你想现在保存吗?", "保存", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, option, option[0]); switch(n) { case JOptionPane.YES_OPTION: doSave(fileName); //保存文件 fileName=""; //清空文件名 jta.setText(""); //清空编辑区 changed=false; //新建文件后,把更新标志改为false; break; case JOptionPane.NO_OPTION: fileName=""; jta.setText(""); changed=false; break; case JOptionPane.CANCEL_OPTION: break; default: break; } } else { fileName=""; jta.setText(""); } } public void openactionlistener() { FileDialog fd=new FileDialog(Mynote.this,"Open...",FileDialog.LOAD); fd.show(); if(fd.getFile()==null) //如果没有选择文件,则返回 return; fileName=fd.getDirectory()+File.separator+fd.getFile();//取得文件名[包括路径] FileInputStream fis=null; //定义时先初始化 String str1=null; try { fis=new FileInputStream(fileName); int size=fis.available(); byte bytes[]=new byte[size]; fis.read(bytes); // 读取文件 str1=new String(bytes); //建立字符串数组 }catch(IOException e1) {} finally { try { fis.close(); }catch(IOException e2){} } if(str1!=null){jta.setText(str1);} changed=false; } class A implements ActionListener { public void actionPerformed(ActionEvent e) { Object o=e.getSource(); JMenuItem jmi=(JMenuItem)o; if(jmi==newjmi) { newactionlistener(); } else if(jmi==openjmi) { openactionlistener(); } else if(jmi==savejmi) { doSave(fileName); } else if(jmi==saveasjmi) { doSaveAs(); } else if(jmi==exitjmi) { if(changed==true) { int n; Object[] option={"YES","NO"}; n=JOptionPane.showOptionDialog(null, "你的文件还没有保存呢,你想现在保存吗?", "保存", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, option, option[0]); switch(n) { case JOptionPane.YES_OPTION: doSave(fileName); break; case JOptionPane.NO_OPTION: break; default: break; } } System.exit(0); } else if(jmi==copyjmi) { jta.copy(); } else if(jmi==pastejmi) { jta.paste(); } else if(jmi==cutjmi) { jta.cut(); } else if(jmi==findjmi) { new Finder(Mynote.this,jta).show(); } else if(jmi==selectalljmi) { jta.selectAll(); } else if(jmi==deletejmi) { jta.cut(); } else if(jmi==fontjmi) { Color newColor=JColorChooser.showDialog(Mynote.this,"选择字体颜色",jta.getForeground()); if(newColor!=null) jta.setForeground(newColor); } else if(jmi==fjmi) { Color newColor=JColorChooser.showDialog(Mynote.this,"选择字体颜色",jta.getForeground()); if(newColor!=null) jta.setForeground(newColor); } else if(jmi==bjmi) { Color newColor=JColorChooser.showDialog(Mynote.this,"选择背景颜色",jta.getBackground()); if(newColor!=null) jta.setBackground(newColor); } else if(jmi==aboutjmi) { new About(Mynote.this,true); } else; } } public void doSave(String fileName) { if(fileName=="") { doSaveAs(); return; } FileOutputStream fos=null; String str3=jta.getText(); try { fos=new FileOutputStream(fileName); fos.write(str3.getBytes()); }catch(IOException e1){} finally { try {fos.close();}catch(IOException e2){} } changed=false; } public void undo(String fileName) { if(fileName=="") { doSaveAs(); return; } FileOutputStream fos=null; String str3=jta.getText(); try { fos=new FileOutputStream(fileName); fos.write(str3.getBytes()); }catch(IOException e1){} finally { try {fos.close();}catch(IOException e2){} } changed=false; } public void doSaveAs() { FileDialog fd=new FileDialog(Mynote.this,"Save...",FileDialog.SAVE); fd.show(); if(fd.getFile()==null) return; fileName=fd.getDirectory()+File.separator+fd.getFile(); String str4=jta.getText(); FileOutputStream fos=null; try { fos=new FileOutputStream(fileName); fos.write(str4.getBytes()); }catch(IOException e1){} finally { try{fos.close();}catch(IOException e2){} } changed=false; } } class jtaL implements ActionListener { public void actionPerformed(ActionEvent e) { } } class print implements ActionListener { PrinterJob prtMe = PrinterJob.getPrinterJob(); public void actionPerformed(ActionEvent e) { try { prtMe.print(); } catch(Exception ew) { } } } class delete implements ActionListener { JTextArea jta; public void actionPerformed(ActionEvent e) { String selection = jta.getSelectedText(); jta.replaceRange("", jta.getSelectionStart(), jta.getSelectionEnd()); } } class selectAllL implements ActionListener { JTextArea jta; public void actionPerformed(ActionEvent e) { jta.selectAll(); } } class Finder extends JDialog implements ActionListener { JFrame jf; JTextArea jta; JButton findButton,closeButton; JPanel findPane,buttonPane; JLabel findLabel; JTextField jtf; public Finder(JFrame jf,JTextArea jta) { super(jf,true); //JDialog的构造方法。必须是第一句。 super.setTitle("查找"); super.getContentPane().setLayout(new GridBagLayout()); this.jf=jf; this.jta=jta; Composes(); this.setLocationRelativeTo(jf); this.pack(); this.requestFocus(); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { Finder.this.dispose(); } }); } public void Composes() { GridBagConstraints gbag=new GridBagConstraints();//GridBagLayout要和GridBagConstraints一起用才有效果。 gbag.fill=GridBagConstraints.HORIZONTAL; gbag.weightx=1.0; gbag.insets=new Insets(0,5,0,0); findButton=new JButton(); closeButton=new JButton(); findPane=new JPanel(); buttonPane=new JPanel(); findLabel=new JLabel(); jtf=new JTextField(); findPane.setLayout(new GridBagLayout()); findLabel.setText("查找内容"); findLabel.setLabelFor(jtf); findPane.add(findLabel,new GridBagConstraints()); jtf.addActionListener(this); //在文本框里面按回车键。 findPane.add(jtf,gbag); gbag=new GridBagConstraints(); gbag.fill=GridBagConstraints.BOTH; gbag.insets=new Insets(11,12,0,11); this.getContentPane().add(findPane,gbag); buttonPane.setLayout(new GridBagLayout()); findButton.setText("查找"); findButton.setMnemonic(KeyEvent.VK_F); findButton.setToolTipText("查找"); findButton.addActionListener(this); buttonPane.add(findButton,new GridBagConstraints()); closeButton.setText("关闭"); closeButton.setMnemonic(KeyEvent.VK_C); closeButton.setToolTipText("关闭"); closeButton.addActionListener(this); gbag=new GridBagConstraints(); gbag.insets=new Insets(0,5,0,0); buttonPane.add(closeButton,gbag); gbag=new GridBagConstraints(); gbag.gridx=0;gbag.gridy=1; gbag.anchor=GridBagConstraints.SOUTHEAST; gbag.insets=new Insets(17,12,11,11); this.getContentPane().add(buttonPane,gbag); } public void actionPerformed(ActionEvent e) { String textStr=jta.getText(); String findStr=jtf.getText(); if(findStr.equals("")); else { int index=textStr.indexOf(findStr); if(index!=-1)//找到查找的内容 { jta.setCaretPosition(index); } else Toolkit.getDefaultToolkit().beep(); } this.dispose(); } } class About extends JDialog { JFrame jf; JTextField jtf; public About(JFrame jf,boolean b) { super(jf,b); this.jf=jf; Composes(); this.getContentPane().add(jtf,BorderLayout.CENTER); super.setLocationRelativeTo(jf); super.pack(); this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){About.this.dispose();}}); super.show(); } public void Composes() { jtf=new JTextField(); jtf.setBackground(new Color(0xffffff)); jtf.setEditable(false); jtf.setText("谢谢"); } } -------------------------------- import java.awt.*; import java.awt.event.*; import java.io.*; import java.awt.datatransfer.*; import javax.swing.*; import javax.swing.event.*; import java.awt.color.*; class MyMenuBar extends MenuBar { public MyMenuBar(Frame parent) { parent.setMenuBar(this); } public void addMenus(String[] menus) { for (int i = 0; i < menus.length; i++) add(new Menu(menus[i])); } public void addMenuItems(int menuNumber, String[] items) { for (int i = 0; i < items.length; i++) { if (items[i] != null) getMenu(menuNumber).add(new MenuItem(items[i])); else getMenu(menuNumber).addSeparator(); } } public void addActionListener(ActionListener al) { for (int i = 0; i < getMenuCount(); i++) for (int j = 0; j < getMenu(i).getItemCount(); j++) getMenu(i).getItem(j).addActionListener(al); } } class MyFile { private FileDialog fd; public MyFile(Frame parent) { fd = new FileDialog(parent, "", FileDialog.LOAD); } private String getPath() { return fd.getDirectory() + "//" + fd.getFile(); } public String getData() throws IOException { fd.setTitle("打开"); fd.setMode(FileDialog.LOAD); fd.setVisible(true); BufferedReader br = new BufferedReader(new FileReader(getPath())); StringBuffer sb = new StringBuffer(); String aline; while ((aline = br.readLine()) != null) sb.append(aline + '/n'); br.close(); return sb.toString(); } public void setData(String data) throws IOException { fd.setTitle("保存"); fd.setMode(FileDialog.SAVE); fd.setVisible(true); BufferedWriter bw = new BufferedWriter(new FileWriter(getPath())); StringBuffer sb = new StringBuffer(); bw.write(data); bw.close(); } } class MyClipboard { private Clipboard cb; public MyClipboard() { cb = Toolkit.getDefaultToolkit().getSystemClipboard(); } public void setData(String data) { cb.setContents(new StringSelection(data), null); } public String getData() { Transferable content = cb.getContents(null); try { return (String) content.getTransferData(DataFlavor.stringFlavor); } catch (Exception ue) { } return null; } } class MyFindDialog extends Dialog implements ActionListener { private Label l1 = new Label("查找字符串"); private Label l2 = new Label("替换字符串"); private TextField tf1 = new TextField(10); private TextField tf2 = new TextField(10); private Button b1 = new Button("查找"); private Button b2 = new Button("替换"); private TextArea ta; public MyFindDialog(Frame owner, TextArea ta) { super(owner, "查找", false); this.ta = ta; setLayout(null); l1.setBounds(10, 30, 80, 20); l2.setBounds(10, 70, 80, 20); tf1.setBounds(90, 30, 90, 20); tf2.setBounds(90, 70, 80, 20); b1.setBounds(190, 30, 80, 20); b2.setBounds(190, 70, 80, 20); add(l1); add(l2); add(tf1); add(tf2); add(b1); add(b2); setResizable(false); b1.addActionListener(this); b2.addActionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void showFind() { setTitle("查找"); setSize(280, 60); setVisible(true); } public void showReplace() { setTitle("查找替换"); setSize(280, 110); setVisible(true); } private void find() { String text = ta.getText(); String str = tf1.getText(); int end = text.length(); int len = str.length(); int start = ta.getSelectionEnd(); if (start == end) start = 0; for (; start <= end - len; start++) { if (text.substring(start, start + len).equals(str)) { ta.setSelectionStart(start); ta.setSelectionEnd(start + len); return; } } ta.setSelectionStart(end); ta.setSelectionEnd(end); } private void replace() { String str = tf2.getText(); if (ta.getSelectedText().equals(tf1.getText())) ta.replaceRange(str, ta.getSelectionStart(), ta.getSelectionEnd()); else find(); } public void actionPerformed(ActionEvent e) { if (e.getSource() == b1) find(); else if (e.getSource() == b2) replace(); } } public class MyMemo extends Frame implements ActionListener { private TextArea editor = new TextArea(); private MyFile mf = new MyFile(this); private MyClipboard cb = new MyClipboard(); private MyFindDialog fd = new MyFindDialog(this, editor); public MyMemo(String title) { super(title); MyMenuBar mb = new MyMenuBar(this); mb.addMenus(new String[] { "文件", "编辑", "格式", "查找", "帮助" }); mb.addMenuItems(0, new String[] { "新建", "打开", "保存", null, "退出" }); mb.addMenuItems(1, new String[] { "剪切", "复制", "粘贴", "删除", null, "全选" }); mb.addMenuItems(2, new String[] { "字体", null, "颜色" }); mb.addMenuItems(3, new String[] { "查找", null, "替换" }); mb.addMenuItems(4, new String[] { "帮助主题", null, "关于记事本" }); add(editor); mb.addActionListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void actionPerformed(ActionEvent e) { String selected = e.getActionCommand(); if (selected.equals("新建")) editor.setText(""); else if (selected.equals("打开")) { try { editor.setText(mf.getData()); } catch (IOException ie) { } } else if (selected.equals("保存")) { try { mf.setData(editor.getText()); } catch (IOException ie) { } } else if (selected.equals("退出")) { dispose(); } else if (selected.equals("剪切")) { cb.setData(editor.getSelectedText()); editor.replaceRange("", editor.getSelectionStart(), editor .getSelectionEnd()); } else if (selected.equals("复制")) { cb.setData(editor.getSelectedText()); } else if (selected.equals("粘贴")) { String str = cb.getData(); editor.replaceRange(str, editor.getSelectionStart(), editor .getSelectionEnd()); } else if (selected.equals("删除")) { editor.replaceRange("", editor.getSelectionStart(), editor .getSelectionEnd()); } else if (selected.equals("全选")) { editor.setSelectionStart(0); editor.setSelectionEnd(editor.getText().length()); } else if (selected.equals("查找")) { fd.showFind(); } else if (selected.equals("查找替换")) { fd.showReplace(); } } public static void main(String[] args) { MyMemo memo = new MyMemo("我的记事本"); memo.setSize(650, 450); memo.setVisible(true); } } 请问如何在这个程序里面的“格式”下添加设置字体“颜色”和“大小”的代码!!!急急急~~~ 请大师们帮帮忙。。。。。谢谢 问题点数:20 回复次数:2 显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复 加为好友 发送私信 在线聊天 kao331431214 o(>_

java 记事本源代码_JAVA记事本源代码 收藏相关推荐

  1. java 记事本 新建_java记事本开发

    今天我想要分享的是一个用java写的一个记事本程序.我知道现在市面上有各种各样的记事本了,但是我发现有的写的功能不够完善,或者是代码层次结构不够清晰,有的甚至看了之后云里雾里的,有的还不乏了非常明显的 ...

  2. java记事本保存_JAVA记事本关于保存

    为什么运行这个程序后点击保存,然后打开时不是按行输出的啊?哪里有问题?publicclassJSBJSB{publicstaticvoidmain(String[]args){FirstWindoww ...

  3. java 围棋代码_java围棋源代码

    基于 WWW 的围棋棋谱演示软件的设计 丁振凡 [期刊名称]<微型机与应用> [年(卷),期]2000(019)008 [摘要]介绍采用 Java 结合 ASP 编程实现的围棋棋谱.... ...

  4. java记事本编译_Java记事本编译

    曹洪胜 2015-05-29 12:13 Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\ ...

  5. java魔塔源代码_JAVA魔塔源代码,适合java入门

    [实例简介] java魔塔框架代码,易理解,适合Java入门,其中,魔塔实现的主体都在MTowerPanel类里面,该项目涉及到线程并发,文件读取与存储,图片应用,Graphics类的应用,Playe ...

  6. java存入光盘_java 这是 学习笔记(jdk7)书中的光盘里的源码,不知大家需要不,里面都是新手 的好 Develop 238万源代码下载- www.pudn.com...

    文件名称: java下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 1272 KB 上传时间: 2013-04-01 下载次数: 18 提 供 者: 孙鹏启 详细 ...

  7. java编程源代码_java经典编程300例源代码下载

    java经典编程300例源代码是针对java编程的编程源代码.以基础知识为框架,介绍了各部分知识所对应的常用开发实例,并进行了透彻解代码解析和知识扩展4部分,每一部分都进行了细致的说明.__java经 ...

  8. 用Java制作简单的记事本

    目录 前言 主界面设计 功能实现 打开 另存为 保存 查找 替换 成员变量 其他方法 警告弹窗 不移动光标更新文本框内容 源代码 总结 转载请注明出处,尊重作者劳动成果. 前言 考完试想写敲一下代码就 ...

  9. Java案例:简易记事本

    Java案例:简易记事本 一.案例演示 二.涉及知识点 1.窗口(JFrame) 2.标签(JLabel) 3.文本区(JTextArea) 4.菜单 5.文件读写 6.事件处理 7.工具栏   三. ...

最新文章

  1. 从上往下 流式布局_教大家怎么写前端布局
  2. Mysql aborted_client_MySQL之aborted connections和aborted clients
  3. 离开英伟达仅19个月,他交出了一块国产全功能GPU
  4. 年度国家科学技术奖:高文周志华王海峰唐杰等上榜,两位“30后”院士获最高奖...
  5. 【Ex_BSGSBSGS算法模板】poj2417 poj3243
  6. 1026 程序运行时间 (15 分)(c语言)
  7. 【机器学习】NMF(非负矩阵分解)
  8. 70+漂亮且极具亲和力的导航菜单设计推荐
  9. IDEA启动Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的解决办法
  10. 数据结构开发(3):线性表的顺序存储结构
  11. HTML如何实现单元格自动编号,如何在Excel中自动为列编号?
  12. request.path 值危险
  13. 电视墙服务器应用,电视墙服务器技术概述
  14. 飞信php接口 web service
  15. ms17-010 php版本,MS17-010补丁360版
  16. viper4android哪个版本好,ViPER4Android FX蝰蛇音效下载-ViPER4Android FX蝰蛇音效 v2.7.0.0_手机乐园...
  17. 如何理解电容、电感产生的相位差
  18. 淘宝、百度、腾讯、京东 那不得不说的四角恋故事
  19. python 超时退出程序_python – 如何在超时后中止multiprocessing.Pool中的任务?
  20. 数字图像处理 - 灰度变换与空间滤波

热门文章

  1. java核心技术读书笔记—继承
  2. 倒计时1天! | 明日9点,这场精彩的Web3盛宴不容错过
  3. Adobe Photoshop CC制作logo
  4. 【面试题】那你再说说线程池的核心配置参数都是干什么的?平时我们应该怎么用?
  5. 2.3   文 法 和 语 言 的 形 式 定义
  6. 简历,求职求项目,硕士-4年工作经验-2年管理经验
  7. flash能否制作html游戏,10件Flash可以做而HTML5做不了的事情
  8. 洛谷[LnOI2019]长脖子鹿省选模拟赛 简要题解
  9. python毕业设计基于django框架的个人博客系统的设计与实现 毕设参考
  10. 统计分组的原则是要体现什么_统计分组原则是什么?统计分组的形式是什么