使用JAVA swing实现简单的记事本

来源:互联网 发布:传智播客 云计算大数据 编辑:程序博客网 时间:2024/05/16 04:48

最近刚学完java swing就做个记事本玩玩,有些功能还没实现,还有很多不足之处

本记事本具有查找、新建、保存、另存为、打开、设置字体、设置字体颜色、设置背景颜色、状态栏等功能。


以下是主函数:

package cslg.yao.main;import java.awt.EventQueue;import cslg.yao.Frame.MyFrame;public class Mainview {public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {@Overridepublic void run() {try {MyFrame frame=new MyFrame();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}}


以下是实现函数:

package cslg.yao.Frame;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout;import java.awt.Image;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.RandomAccessFile;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;import java.util.Calendar;import java.util.Date;import java.util.Properties;import java.util.Timer;import java.util.TimerTask;import javax.swing.BorderFactory;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JCheckBoxMenuItem;import javax.swing.JColorChooser;import javax.swing.JDialog;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.KeyStroke;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import javax.swing.event.MenuEvent;import javax.swing.event.MenuListener;import javax.swing.event.UndoableEditEvent;import javax.swing.event.UndoableEditListener;import javax.swing.undo.CannotUndoException;import javax.swing.undo.UndoManager;import cslg.yao.font.MyFont;public class MyFrame extends JFrame implements ActionListener,DocumentListener{/** *  */private static final long serialVersionUID = 8141051389716751825L;//菜单  JMenu fileMenu,editMenu,formatMenu,viewMenu,helpMenu;//“文件”的菜单项  JMenuItem fileMenu_New,fileMenu_Open,fileMenu_Save,fileMenu_SaveAs,fileMenu_PageSetUp,fileMenu_Print,fileMenu_Exit;  //“编辑”的菜单项  JMenuItem editMenu_Undo,editMenu_Cut,editMenu_Copy,editMenu_Paste,editMenu_Delete,editMenu_Find,editMenu_FindNext,editMenu_Replace,editMenu_GoTo,editMenu_SelectAll,editMenu_TimeDate;  //“格式”的菜单项  JCheckBoxMenuItem formatMenu_LineWrap;  JMenuItem formatMenu_Font,formatMenu_BackColor,formatMenu_FrontColor;  //“查看”的菜单项  JCheckBoxMenuItem viewMenu_Status;  //“帮助”的菜单项  JMenuItem helpMenu_HelpTopics,helpMenu_AboutNotepad;//右键弹出菜单项  JPopupMenu popupMenu;  JMenuItem popupMenu_Undo,popupMenu_Cut,popupMenu_Copy,popupMenu_Paste,popupMenu_Delete,popupMenu_SelectAll;  //“文本”编辑区域  JTextArea editArea;  //状态栏标签  JLabel statusLabel;JLabel statusLabel2;//滚动条JScrollPane scroller;//系统剪贴板  Toolkit toolkit=Toolkit.getDefaultToolkit();  Clipboard clipBoard=toolkit.getSystemClipboard();  //创建撤销操作管理器(与撤销操作有关)  protected UndoManager undo=new UndoManager();  protected UndoableEditListener undoHandler=new UndoHandler();boolean isNewFile=true;//是否新文件(未保存过的)String oldValue;//存放编辑区原来的内容,用于比较文本是否有改动  File currentFile;//当前文件名  Font myFont;//构造函数public MyFrame() {initMenu();initFrame();Timer t = new Timer(true);MyTask task=new MyTask();t.schedule(task,1000,1000);}//构造函数结束//初始化菜单public void initMenu(){//设置菜单栏JMenuBar menuBar=new JMenuBar();  //创建文件菜单及菜单项并注册事件监听  fileMenu=new JMenu("文件(F)");  fileMenu.setMnemonic('F');//设置快捷键ALT+F  fileMenu_New=new JMenuItem("新建(N)");  fileMenu_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));  fileMenu_New.addActionListener(this);  fileMenu_Open=new JMenuItem("打开(O)...");  fileMenu_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));  fileMenu_Open.addActionListener(this);  fileMenu_Save=new JMenuItem("保存(S)");  fileMenu_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));  fileMenu_Save.addActionListener(this);  fileMenu_SaveAs=new JMenuItem("另存为(A)...");  fileMenu_SaveAs.addActionListener(this);  fileMenu_PageSetUp=new JMenuItem("页面设置(U)...");  fileMenu_PageSetUp.addActionListener(this);  fileMenu_Print=new JMenuItem("打印(P)...");  fileMenu_Print.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK));   fileMenu_Print.addActionListener(this);  fileMenu_Exit=new JMenuItem("退出(X)");  fileMenu_Exit.addActionListener(this);//创建编辑菜单及菜单项并注册事件监听  editMenu=new JMenu("编辑(E)");  editMenu.setMnemonic('E');//设置快捷键ALT+E  //当选择编辑菜单时,设置剪切、复制、粘贴、删除等功能的可用性  editMenu.addMenuListener(new MenuListener()  {   public void menuCanceled(MenuEvent e)//取消菜单时调用  {   checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性  }  public void menuDeselected(MenuEvent e)//取消选择某个菜单时调用  {   checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性  }  public void menuSelected(MenuEvent e)//选择某个菜单时调用  {   checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性  }  });  editMenu_Undo=new JMenuItem("撤销(U)");  editMenu_Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));  editMenu_Undo.addActionListener(this);  editMenu_Undo.setEnabled(false);  editMenu_Cut=new JMenuItem("剪切(T)");  editMenu_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));  editMenu_Cut.addActionListener(this);  editMenu_Copy=new JMenuItem("复制(C)");  editMenu_Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));  editMenu_Copy.addActionListener(this);  editMenu_Paste=new JMenuItem("粘贴(P)");  editMenu_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));  editMenu_Paste.addActionListener(this);  editMenu_Delete=new JMenuItem("删除(D)");  editMenu_Delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));  editMenu_Delete.addActionListener(this);  editMenu_Find=new JMenuItem("查找(F)...");  editMenu_Find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));  editMenu_Find.addActionListener(this);  editMenu_FindNext=new JMenuItem("查找下一个(N)");  editMenu_FindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0));  editMenu_FindNext.addActionListener(this);  editMenu_Replace = new JMenuItem("替换(R)...",'R');   editMenu_Replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK));   editMenu_Replace.addActionListener(this);  editMenu_GoTo = new JMenuItem("转到(G)...",'G');   editMenu_GoTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK));   editMenu_GoTo.addActionListener(this);  editMenu_SelectAll = new JMenuItem("全选",'A');   editMenu_SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));   editMenu_SelectAll.addActionListener(this);  editMenu_TimeDate = new JMenuItem("时间/日期(D)",'D');  editMenu_TimeDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0));  editMenu_TimeDate.addActionListener(this);  //创建格式菜单及菜单项并注册事件监听  formatMenu=new JMenu("格式(O)");  formatMenu.setMnemonic('O');//设置快捷键ALT+O  formatMenu_LineWrap=new JCheckBoxMenuItem("自动换行(W)");  formatMenu_LineWrap.setMnemonic('W');//设置快捷键ALT+W  formatMenu_LineWrap.setState(true);  formatMenu_LineWrap.addActionListener(this);  formatMenu_Font=new JMenuItem("字体(F)...");  formatMenu_Font.addActionListener(this);formatMenu_BackColor=new JMenuItem("设置背景颜色");formatMenu_BackColor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,InputEvent.SHIFT_MASK+InputEvent.ALT_MASK));formatMenu_BackColor.addActionListener(this);formatMenu_FrontColor=new JMenuItem("设置字体颜色");formatMenu_FrontColor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.SHIFT_MASK+InputEvent.ALT_MASK));formatMenu_FrontColor.addActionListener(this);//创建查看菜单及菜单项并注册事件监听  viewMenu=new JMenu("查看(V)");  viewMenu.setMnemonic('V');//设置快捷键ALT+V  viewMenu_Status=new JCheckBoxMenuItem("状态栏(S)");  viewMenu_Status.setMnemonic('S');//设置快捷键ALT+S  viewMenu_Status.setState(true);  viewMenu_Status.addActionListener(this);  //创建帮助菜单及菜单项并注册事件监听  helpMenu = new JMenu("帮助(H)");  helpMenu.setMnemonic('H');//设置快捷键ALT+H  helpMenu_HelpTopics = new JMenuItem("帮助主题(H)");   helpMenu_HelpTopics.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));  helpMenu_HelpTopics.addActionListener(this);  helpMenu_AboutNotepad = new JMenuItem("关于记事本(A)");   helpMenu_AboutNotepad.addActionListener(this);  //向菜单条添加"文件"菜单及菜单项  menuBar.add(fileMenu);   fileMenu.add(fileMenu_New);   fileMenu.add(fileMenu_Open);   fileMenu.add(fileMenu_Save);   fileMenu.add(fileMenu_SaveAs);   fileMenu.addSeparator();        //分隔线  fileMenu.add(fileMenu_PageSetUp);   fileMenu.add(fileMenu_Print);   fileMenu.addSeparator();        //分隔线   fileMenu.add(fileMenu_Exit);   //向菜单条添加"编辑"菜单及菜单项   menuBar.add(editMenu);   editMenu.add(editMenu_Undo);    editMenu.addSeparator();        //分隔线   editMenu.add(editMenu_Cut);   editMenu.add(editMenu_Copy);   editMenu.add(editMenu_Paste);   editMenu.add(editMenu_Delete);   editMenu.addSeparator();        //分隔线  editMenu.add(editMenu_Find);   editMenu.add(editMenu_FindNext);   editMenu.add(editMenu_Replace);  editMenu.add(editMenu_GoTo);   editMenu.addSeparator();        //分隔线  editMenu.add(editMenu_SelectAll);   editMenu.add(editMenu_TimeDate);  //向菜单条添加"格式"菜单及菜单项        menuBar.add(formatMenu);   formatMenu.add(formatMenu_LineWrap);   formatMenu.add(formatMenu_Font);formatMenu.add(formatMenu_BackColor);formatMenu.add(formatMenu_FrontColor);//向菜单条添加"查看"菜单及菜单项   menuBar.add(viewMenu);   viewMenu.add(viewMenu_Status);  //向菜单条添加"帮助"菜单及菜单项  menuBar.add(helpMenu);  helpMenu.add(helpMenu_HelpTopics);  helpMenu.addSeparator();  helpMenu.add(helpMenu_AboutNotepad);  //向窗口添加菜单条                this.setJMenuBar(menuBar);  //创建文本编辑区并添加滚动条  editArea=new JTextArea(20,50);  scroller=new JScrollPane(editArea);  scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);  this.add(scroller,BorderLayout.CENTER);//向窗口添加文本编辑区  editArea.setWrapStyleWord(true);//设置单词在一行不足容纳时换行  editArea.setLineWrap(true);//设置文本编辑区自动换行默认为true,即会"自动换行"  //this.add(editArea,BorderLayout.CENTER);//向窗口添加文本编辑区  oldValue=editArea.getText();//获取原文本编辑区的内容  //编辑区注册事件监听(与撤销操作有关)  editArea.getDocument().addUndoableEditListener(undoHandler);  editArea.getDocument().addDocumentListener(this);  //创建右键弹出菜单  popupMenu=new JPopupMenu();  popupMenu_Undo=new JMenuItem("撤销(U)");  popupMenu_Cut=new JMenuItem("剪切(T)");  popupMenu_Copy=new JMenuItem("复制(C)");  popupMenu_Paste=new JMenuItem("粘帖(P)");  popupMenu_Delete=new JMenuItem("删除(D)");  popupMenu_SelectAll=new JMenuItem("全选(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);//文本编辑区注册右键菜单事件  editArea.addMouseListener(new MouseAdapter()  {   public void mousePressed(MouseEvent e)  {   if(e.isPopupTrigger())//返回此鼠标事件是否为该平台的弹出菜单触发事件  {   popupMenu.show(e.getComponent(),e.getX(),e.getY());//在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单  }  checkMenuItemEnabled();//设置剪切,复制,粘帖,删除等功能的可用性  editArea.requestFocus();//编辑区获取焦点  }  public void mouseReleased(MouseEvent e)  {   if(e.isPopupTrigger())//返回此鼠标事件是否为该平台的弹出菜单触发事件  {   popupMenu.show(e.getComponent(),e.getX(),e.getY());//在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单  }  checkMenuItemEnabled();//设置剪切,复制,粘帖,删除等功能的可用性  editArea.requestFocus();//编辑区获取焦点  }  });//文本编辑区注册右键菜单事件结束  //创建和添加状态栏  JPanel panel1=new JPanel();statusLabel=new JLabel("");statusLabel2=new JLabel("文件状态");panel1.add(statusLabel);panel1.add(statusLabel2);this.add(panel1,BorderLayout.SOUTH);//向窗口添加状态栏标签  //添加窗口监听器  addWindowListener(new WindowAdapter()  {   public void windowClosing(WindowEvent e)  {   exitWindowChoose();  }  });  checkMenuItemEnabled();  editArea.requestFocus();}//初始化窗体public void initFrame(){Properties p = new Properties();//设置窗体大小位置try {if(new File("src/size.properties").exists()){p.load(new FileReader("src/size.properties"));this.setBounds(Integer.parseInt(p.getProperty("x")), Integer.parseInt(p.getProperty("y")), Integer.parseInt(p.getProperty("width")), Integer.parseInt(p.getProperty("height")));myFont = new Font(p.getProperty("FontName"),Integer.parseInt(p.getProperty("FontStyle")),Integer.parseInt(p.getProperty("FontSize")));editArea.setFont(myFont);editArea.setForeground(new Color(Integer.parseInt(p.getProperty("foreColor"))));editArea.setBackground(new Color(Integer.parseInt(p.getProperty("backColor"))));}else{this.setSize(640,480);this.setLocationRelativeTo(null);}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}//设置子对话框关闭但主对话框可以继续保留!!!!!!!this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);//设置图标Image img=toolkit.getImage("img/logo.jpg");this.setIconImage(img);//设置标题名称this.setTitle("呱?呱!");}//初始化窗体结束//设置菜单项的可用性:剪切,复制,粘帖,删除功能public void checkMenuItemEnabled()  {   String selectText=editArea.getSelectedText();  if(selectText==null)  {   editMenu_Cut.setEnabled(false);  popupMenu_Cut.setEnabled(false);  editMenu_Copy.setEnabled(false);  popupMenu_Copy.setEnabled(false);  editMenu_Delete.setEnabled(false);  popupMenu_Delete.setEnabled(false);  }  else  {   editMenu_Cut.setEnabled(true);  popupMenu_Cut.setEnabled(true);   editMenu_Copy.setEnabled(true);  popupMenu_Copy.setEnabled(true);  editMenu_Delete.setEnabled(true);  popupMenu_Delete.setEnabled(true);  }  //粘帖功能可用性判断  Transferable contents=clipBoard.getContents(this);  if(contents==null)  {   editMenu_Paste.setEnabled(false);  popupMenu_Paste.setEnabled(false);  }  else  {   editMenu_Paste.setEnabled(true);  popupMenu_Paste.setEnabled(true);     }}//方法checkMenuItemEnabled()结束  //关闭窗口时发生public void exitWindowChoose() {editArea.requestFocus();String currentvalue =editArea.getText();//获取当前编辑域的内容//如果当选内容与之前内容无变化,直接退出if (currentvalue.equals(oldValue)) {setMemory();System.exit(0);}//否则弹出对话框else {int exitChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","退出提示",JOptionPane.YES_NO_CANCEL_OPTION);//当选择是按钮if (exitChoose==JOptionPane.YES_OPTION) {//判断是否是新文件if (isNewFile) {savenew();}//不是新文件else {savenotnew();}setMemory();System.exit(0);}else if (exitChoose==JOptionPane.NO_OPTION) {setMemory();System.exit(0);}else if (exitChoose==JOptionPane.CANCEL_OPTION) {statusLabel2.setText("您没有保存文件!");return;}else {return;}}}//结束//实现监听器各个功能@Overridepublic void actionPerformed(ActionEvent e) {//新建菜单功能实现if (e.getSource()==fileMenu_New) {String currentvalue=editArea.getText();boolean isTextchange=(currentvalue.equals(oldValue))?true:false;//文本内容是否变动if (!isTextchange) {int saveChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","提示",JOptionPane.YES_NO_CANCEL_OPTION);  if(saveChoose==JOptionPane.YES_OPTION)  {saveother();}  //当选择否按钮是else if(saveChoose==JOptionPane.NO_OPTION)  {   filenew();}//当选择取消按钮时else if(saveChoose==JOptionPane.CANCEL_OPTION)  {   statusLabel2.setText("您没有选择新建文件");return;  } }else  {   filenew();  }}//新建结束//向菜单实现打开功能else if (e.getSource()==fileMenu_Open) {//editArea.requestFocus();String currentValue=editArea.getText();boolean isTextchange=(currentValue.equals(oldValue))?true:false;//判断文件是否变动if (!isTextchange) {int saveChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","提示",JOptionPane.YES_NO_CANCEL_OPTION);//当选择是按钮if (saveChoose==JOptionPane.YES_OPTION) {saveother();}//当选择否按钮else if(saveChoose==JOptionPane.NO_OPTION)  {fileopen();}  else  {   return;  }  }//文件内容无变动执行else  {fileopen();}  }//打开结束//保存else if (e.getSource()==fileMenu_Save) {//editArea.requestFocus();//是否是新文件if(isNewFile)  {savenew();}//不是新文件执行else  {savenotnew();}  }//保存结束//另存为else if (e.getSource()==fileMenu_SaveAs) {saveother();}//另存为结束//页面设置功能else if (e.getSource()==fileMenu_PageSetUp) {JOptionPane.showMessageDialog(this,"此功能尚未实现!","提示",JOptionPane.WARNING_MESSAGE);}//打印功能else if (e.getSource()==fileMenu_Print) {JOptionPane.showMessageDialog(this,"此功能尚未实现!","提示",JOptionPane.WARNING_MESSAGE);}//退出功能else if (e.getSource()==fileMenu_Exit) {exitWindowChoose();}//退出结束//编辑的撤销功能else if(e.getSource()==editMenu_Undo || e.getSource()==popupMenu_Undo)  {   if(undo.canUndo())  {   try  {   undo.undo();  }  catch (CannotUndoException ex)  {   System.out.println("Unable to undo:" + ex);  }  }  if(!undo.canUndo())  {   editMenu_Undo.setEnabled(false);popupMenu_Undo.setEnabled(false);}  }//撤销结束//剪切功能else if (e.getSource()==editMenu_Cut || e.getSource()==popupMenu_Cut) {//editArea.requestFocus();String text =editArea.getSelectedText();StringSelection selection=new StringSelection(text);//构建String数据类型clipBoard.setContents(selection, null);//添加文本到系统剪切板 editArea.replaceRange("",editArea.getSelectionStart(),editArea.getSelectionEnd());checkMenuItemEnabled();}//功能结束//复制功能else if (e.getSource()==editMenu_Copy || e.getSource()==popupMenu_Copy) {//editArea.requestFocus();  String text=editArea.getSelectedText();  StringSelection selection=new StringSelection(text);//构建String数据类型  clipBoard.setContents(selection,null);//添加文本到系统剪切板checkMenuItemEnabled();}//功能结束//粘贴功能else if (e.getSource()==editMenu_Paste || e.getSource()==popupMenu_Paste) {//editArea.requestFocus();  Transferable contents=clipBoard.getContents(this);  if(contents==null)return;  String text="";  try  {   text=(String)contents.getTransferData(DataFlavor.stringFlavor);  //表示 Java Unicode String 类}  catch (Exception exception)  {exception.printStackTrace();}  editArea.replaceRange(text,editArea.getSelectionStart(),editArea.getSelectionEnd());  checkMenuItemEnabled();}//功能结束//删除功能else if (e.getSource()==editMenu_Delete || e.getSource()==popupMenu_Delete) {//editArea.requestFocus();editArea.replaceRange("",editArea.getSelectionStart(),editArea.getSelectionEnd());checkMenuItemEnabled();}//功能结束//查找功能else if (e.getSource()==editMenu_Find) {find();}//功能结束功能//查找下一个else if (e.getSource()==editMenu_FindNext) {find();}//功能结束//替换功能else if (e.getSource()==editMenu_Replace) {JOptionPane.showMessageDialog(this,"此功能尚未实现!","提示",JOptionPane.WARNING_MESSAGE);}//功能结束//转到功能else if (e.getSource()==editMenu_GoTo) {JOptionPane.showMessageDialog(this,"此功能尚未实现!","提示",JOptionPane.WARNING_MESSAGE);}//功能结束//全选功能else if (e.getSource()==editMenu_SelectAll || e.getSource()==popupMenu_SelectAll) {editArea.selectAll();}//功能结束//时间日期功能else if (e.getSource()==editMenu_TimeDate) {Calendar now=Calendar.getInstance();Date date =now.getTime();editArea.insert(date.toString(),editArea.getCaretPosition());}//功能结束//自动换行功能(默认设为开启)else if (e.getSource()==formatMenu_LineWrap) {if(formatMenu_LineWrap.getState())  editArea.setLineWrap(true);  else   editArea.setLineWrap(false);  }//功能结束//字体设置功能else if (e.getSource()==formatMenu_Font) {MyFont font=new MyFont(editArea.getFont());int returnvalue=font.showFontDialog(this);if (returnvalue==font.APPROVE_OPTION) {Font f=font.getSelectFont();editArea.setFont(f);}else {statusLabel2.setText("未选择新字体!");return;}}//功能结束//选择背景颜色功能else if (e.getSource()==formatMenu_BackColor) {Color c=JColorChooser.showDialog(this,"颜色选择",Color.BLACK);editArea.setBackground(c);}//功能结束else if (e.getSource()==formatMenu_FrontColor) {Color c=JColorChooser.showDialog(this,"颜色选择",Color.BLACK);editArea.setForeground(c);}//状态栏功能(默认可见)else if (e.getSource()==viewMenu_Status) {if(viewMenu_Status.getState()){statusLabel.setVisible(true);statusLabel2.setVisible(true);}  else{statusLabel.setVisible(false);statusLabel2.setVisible(false);}   }//功能结束//帮助主题else if (e.getSource()==helpMenu_HelpTopics) {JOptionPane.showMessageDialog(this,"此功能尚未实现!","提示",JOptionPane.WARNING_MESSAGE);}else if (e.getSource()==helpMenu_AboutNotepad) {JOptionPane.showMessageDialog(this, "**********************\n"+ "*   编写者姚志文    *\n"+ "*   2017/8/14            *\n"+ "**********************", "呱?呱!", JOptionPane.QUESTION_MESSAGE);}}//记住自己的配置public void setMemory(){Properties size = new Properties();size.setProperty("x", this.getBounds().x+"");size.setProperty("y", this.getBounds().y+"");size.setProperty("width", this.getBounds().width+"");size.setProperty("height", this.getBounds().height+"");size.setProperty("FontName", this.editArea.getFont().getFamily());size.setProperty("FontStyle", this.editArea.getFont().getStyle()+"");size.setProperty("FontSize", this.editArea.getFont().getSize()+"");size.setProperty("foreColor", this.editArea.getForeground().getRGB()+"");size.setProperty("backColor", this.editArea.getBackground().getRGB()+"");FileWriter fr;try {fr = new FileWriter("src/size.properties");size.store(fr, "Size Info");fr.close();} catch (IOException e2) {e2.printStackTrace();}}//新文件时保存public void savenew(){JFileChooser fileChooser=new JFileChooser();fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);fileChooser.setApproveButtonText("确定");fileChooser.setDialogTitle("另存为");int result=fileChooser.showSaveDialog(this);//如果选择取消向状态栏添加提示if (result==JFileChooser.CANCEL_OPTION) {statusLabel2.setText("您没有保存文件!");return;}File saveFileName=fileChooser.getSelectedFile();if (saveFileName==null||saveFileName.getName().equals("")) {JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);}//合法文件名else {//保存文件try {OutputStream os=new FileOutputStream(saveFileName);OutputStreamWriter osw=new OutputStreamWriter(os);//FileWriter fw=new FileWriter(saveFileName);//BufferedWriter bfw=new BufferedWriter(fw);PrintWriter pw = new PrintWriter(osw);pw.write(editArea.getText());pw.flush();pw.close();isNewFile=false;currentFile=saveFileName;this.setTitle(saveFileName.getName()+"- 呱?呱!");statusLabel2.setText("当前文件为:"+saveFileName.getAbsoluteFile());} catch (IOException e) {e.printStackTrace();}}}//不是新文件时保存public void savenotnew(){try {OutputStream os=new FileOutputStream(currentFile);OutputStreamWriter osw=new OutputStreamWriter(os);//FileWriter fw=new FileWriter(currentFile);//BufferedWriter bfw=new BufferedWriter(fw);PrintWriter pw = new PrintWriter(osw);pw.write(editArea.getText());pw.flush();pw.close();} catch (IOException e) {e.printStackTrace();}}//另存为public void saveother(){JFileChooser fileChooser=new JFileChooser();  fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);  fileChooser.setDialogTitle("另存为");  int result=fileChooser.showSaveDialog(this); //如果选择取消向状态栏添加提示if(result==JFileChooser.CANCEL_OPTION)  {   statusLabel2.setText("您没有选择任何文件");  return;  }  File saveFileName=fileChooser.getSelectedFile();  if(saveFileName==null || saveFileName.getName().equals(""))  {   JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);  }//合法文件名else   {   //保存文件try  {   OutputStream os=new FileOutputStream(saveFileName);//FileWriter fw=new FileWriter(saveFileName);  //BufferedWriter bfw=new BufferedWriter(fw);OutputStreamWriter osw=new OutputStreamWriter(os);PrintWriter pw=new PrintWriter(osw);pw.write(editArea.getText());  pw.flush();pw.close();  isNewFile=false;  currentFile=saveFileName;  oldValue=editArea.getText();  this.setTitle(saveFileName.getName()+" - 呱?呱!");  statusLabel2.setText("当前打开文件:"+saveFileName.getAbsoluteFile());  }  catch (IOException ioException)  {ioException.printStackTrace();}  }  }//新建文件操作public void filenew(){editArea.replaceRange("",0,editArea.getText().length());  statusLabel2.setText(" 新建文件");  this.setTitle("无标题 - 呱?呱!");  isNewFile=true;  undo.discardAllEdits(); //撤消所有的"撤消"操作  editMenu_Undo.setEnabled(false);  oldValue=editArea.getText();}//打开文件操作public void fileopen(){JFileChooser fileChooser=new JFileChooser();  fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);  fileChooser.setDialogTitle("打开文件");  int result=fileChooser.showOpenDialog(this);//如果选择取消向状态栏添加提示if(result==JFileChooser.CANCEL_OPTION)  {   statusLabel2.setText("您没有选择任何文件");  return;  }  File fileName=fileChooser.getSelectedFile();  if(fileName==null || fileName.getName().equals(""))  {   JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE);  }//合法文件名else  {   //读取文件try  { FileInputStream fis=new FileInputStream(fileName);byte[] content=new byte[fis.available()];fis.read(content);editArea.setText(new String(content));editArea.setCaretPosition(0);fis.close();//FileChannel fcin = new RandomAccessFile(fileName, "r").getChannel(); //ByteBuffer rBuffer = ByteBuffer.allocate(1024*1024*7);////try{ //byte[] bs = new byte[1024*1024*7]; ////while(fcin.read(rBuffer) != -1){ //int rSize = rBuffer.position(); //rBuffer.rewind(); //rBuffer.get(bs); //rBuffer.clear(); //String tempString = new String(bs, 0, rSize); ////System.out.println(tempString);//editArea.setText(tempString);//} //} catch (IOException e) { //// TODO Auto-generated catch block //e.printStackTrace(); //} this.setTitle(fileName.getName()+" - 呱?呱!");statusLabel2.setText(" 当前打开文件:"+fileName.getAbsoluteFile());  //fr.close();  isNewFile=false;  currentFile=fileName;  oldValue=editArea.getText();  }  catch (Exception ioException)  {ioException.printStackTrace();}  }  }//查找方法  public void find()  {   final JDialog findDialog=new JDialog(this,"查找",false);//false时允许其他窗口同时处于激活状态(即无模式)  Container con=findDialog.getContentPane();//返回此对话框的contentPane对象      con.setLayout(new FlowLayout(FlowLayout.LEFT));  JLabel findContentLabel=new JLabel("查找内容(N):");  final JTextField findText=new JTextField(15);  JButton findNextButton=new JButton("查找下一个(F):");  final JCheckBox matchCheckBox=new JCheckBox("区分大小写(C)");  ButtonGroup bGroup=new ButtonGroup();  final JRadioButton upButton=new JRadioButton("向上(U)");  final JRadioButton downButton=new JRadioButton("向下(U)");  downButton.setSelected(true);  bGroup.add(upButton);  bGroup.add(downButton);  /*ButtonGroup此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。         使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。*/  /*JRadioButton此类实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。         与 ButtonGroup 对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。         (创建一个 ButtonGroup 对象并用其 add 方法将 JRadioButton 对象包含在此组中。)*/  JButton cancel=new JButton("取消");  //取消按钮事件处理  cancel.addActionListener(new ActionListener()  {   public void actionPerformed(ActionEvent e)  {   findDialog.dispose();  }  });  //"查找下一个"按钮监听  findNextButton.addActionListener(new ActionListener()  {   public void actionPerformed(ActionEvent e)  {   //"区分大小写(C)"的JCheckBox是否被选中  int k=0,m=0;  final String str1,str2,str3,str4,strA,strB;  str1=editArea.getText();  str2=findText.getText();  str3=str1.toUpperCase();  str4=str2.toUpperCase();  if(matchCheckBox.isSelected())//区分大小写  {   strA=str1;  strB=str2;  }  else//不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找   {   strA=str3;  strB=str4;  }  if(upButton.isSelected())  {   //k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);  if(editArea.getSelectedText()==null)  k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);  else  k=strA.lastIndexOf(strB, editArea.getCaretPosition()-findText.getText().length()-1);      if(k>-1)  {   //String strData=strA.subString(k,strB.getText().length()+1);  editArea.setCaretPosition(k);  editArea.select(k,k+strB.length());  }  else  {   JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);  }  }  else if(downButton.isSelected())  {   if(editArea.getSelectedText()==null)  k=strA.indexOf(strB,editArea.getCaretPosition()+1);  else  k=strA.indexOf(strB, editArea.getCaretPosition()-findText.getText().length()+1);      if(k>-1)  {   //String strData=strA.subString(k,strB.getText().length()+1);  editArea.setCaretPosition(k);  editArea.select(k,k+strB.length());  }  else  {   JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);  }  }  }  });//"查找下一个"按钮监听结束  //创建"查找"对话框的界面  JPanel panel1=new JPanel();  JPanel panel2=new JPanel();  JPanel panel3=new JPanel();  JPanel directionPanel=new JPanel();  directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));  //设置directionPanel组件的边框;  //BorderFactory.createTitledBorder(String title)创建一个新标题边框,使用默认边框(浮雕化)、默认文本位置(位于顶线上)、默认调整 (leading) 以及由当前外观确定的默认字体和文本颜色,并指定了标题文本。  directionPanel.add(upButton);  directionPanel.add(downButton);  panel1.setLayout(new GridLayout(2,1));  panel1.add(findNextButton);  panel1.add(cancel);  panel2.add(findContentLabel);  panel2.add(findText);  panel2.add(panel1);  panel3.add(matchCheckBox);  panel3.add(directionPanel);  con.add(panel2);  con.add(panel3);  findDialog.setSize(410,180);  findDialog.setResizable(false);//不可调整大小  findDialog.setLocation(230,280);  findDialog.setVisible(true);  }//查找方法结束  //内部类实现显示时间class MyTask extends TimerTask {@Overridepublic void run() {statusLabel.setText(new Date().toString());System.gc();}} //实现接口UndoableEditListener的类UndoHandler(与撤销操作有关)  class UndoHandler implements UndoableEditListener  {   public void undoableEditHappened(UndoableEditEvent uee)  {   undo.addEdit(uee.getEdit());  }  }//当文本发生改变@Overridepublic void changedUpdate(DocumentEvent e) {editMenu_Undo.setEnabled(true);popupMenu_Undo.setEnabled(true);}//当文本发生插入@Overridepublic void insertUpdate(DocumentEvent e) {editMenu_Undo.setEnabled(true);popupMenu_Undo.setEnabled(true);}//当文本发生删除@Overridepublic void removeUpdate(DocumentEvent e) {editMenu_Undo.setEnabled(true);popupMenu_Undo.setEnabled(true);}}


以下是字体实现函数(引用网上的实现类)

package cslg.yao.font;import java.awt.BorderLayout;  import java.awt.Color;  import java.awt.Dimension;  import java.awt.Font;  import java.awt.GraphicsEnvironment;  import java.awt.event.ActionEvent;  import java.awt.event.ActionListener;  import java.awt.event.FocusEvent;  import java.awt.event.FocusListener;  import javax.swing.BorderFactory;  import javax.swing.Box;  import javax.swing.ButtonGroup;  import javax.swing.JButton;  import javax.swing.JDialog;  import javax.swing.JFrame;  import javax.swing.JLabel;  import javax.swing.JList;  import javax.swing.JOptionPane;  import javax.swing.JPanel;  import javax.swing.JRadioButton;  import javax.swing.JScrollPane;  import javax.swing.JTextField;  import javax.swing.event.ListSelectionEvent;  import javax.swing.event.ListSelectionListener;  import javax.swing.text.AttributeSet;  import javax.swing.text.BadLocationException;  import javax.swing.text.Document;  import javax.swing.text.PlainDocument;  /**   * 字体选择器,仿记事本中的字体控件,使用操作方法与文件选择器JFileChooser基本相同。   *  */  @SuppressWarnings("serial")  public class MyFont extends JDialog {      /**       * 选择取消按钮的返回值       */      public static final int CANCEL_OPTION = 0;      /**       * 选择确定按钮的返回值       */      public static final int APPROVE_OPTION = 1;      /**       * 中文预览的字符串       */      private static final String CHINA_STRING = "神马都是浮云!";      /**       * 英文预览的字符串       */      private static final String ENGLISH_STRING = "Hello Kitty!";      /**       * 数字预览的字符串       */      private static final String NUMBER_STRING = "0123456789";      // 预设字体,也是将来要返回的字体      private Font font = null;      // 字体选择器组件容器      private Box box = null;      // 字体文本框      private JTextField fontText = null;      // 样式文本框      private JTextField styleText = null;      // 文字大小文本框      private JTextField sizeText = null;      // 预览文本框      private JTextField previewText = null;      // 中文预览      private JRadioButton chinaButton = null;      // 英文预览      private JRadioButton englishButton = null;      // 数字预览      private JRadioButton numberButton = null;      // 字体选择框      private JList fontList = null;      // 样式选择器      private JList styleList = null;      // 文字大小选择器      private JList sizeList = null;      // 确定按钮      private JButton approveButton = null;      // 取消按钮      private JButton cancelButton = null;      // 所有字体      private String [] fontArray = null;      // 所有样式      private String [] styleArray = {"常规", "粗体", "斜体", "粗斜体"};      // 所有预设字体大小      private String [] sizeArray = {"8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36", "48", "初号", "小初", "一号", "小一", "二号", "小二", "三号", "小三", "四号", "小四", "五号", "小五", "六号", "小六", "七号", "八号"};      // 上面数组中对应的字体大小      private int [] sizeIntArray = {8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 42, 36, 26, 24, 22, 18, 16, 15, 14, 12, 10, 9, 8, 7, 6, 5};      // 返回的数值,默认取消      private int returnValue = CANCEL_OPTION;      /**       * 体构造一个字体选择器       */      public MyFont() {          this(new Font("宋体", Font.PLAIN, 12));      }      /**       * 使用给定的预设字体构造一个字体选择器       * @param font 字体       */      public MyFont(Font font) {          setTitle("字体选择器");          this.font = font;          // 初始化UI组件          init();          // 添加监听器          addListener();          // 按照预设字体显示          setup();          // 基本设置          setModal(true);          setResizable(false);          // 自适应大小          pack();      }      /**       * 初始化组件       */      private void init(){          // 获得系统字体          GraphicsEnvironment eq = GraphicsEnvironment.getLocalGraphicsEnvironment();          fontArray = eq.getAvailableFontFamilyNames();          // 主容器          box = Box.createVerticalBox();          box.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));          fontText = new JTextField();          fontText.setEditable(false);          fontText.setBackground(Color.WHITE);          styleText = new JTextField();          styleText.setEditable(false);          styleText.setBackground(Color.WHITE);          sizeText = new JTextField("12");          // 给文字大小文本框使用的Document文档,制定了一些输入字符的规则          Document doc = new PlainDocument(){              public void insertString(int offs, String str, AttributeSet a)                      throws BadLocationException {                  if (str == null) {                      return;                  }                  if (getLength() >= 3) {                      return;                  }                  if (!str.matches("[0-9]+") && !str.equals("初号") && !str.equals("小初") && !str.equals("一号") && !str.equals("小一") && !str.equals("二号") && !str.equals("小二") && !str.equals("三号") && !str.equals("小三") && !str.equals("四号") && !str.equals("小四") && !str.equals("五号") && !str.equals("小五") && !str.equals("六号") && !str.equals("小六") && !str.equals("七号") && !str.equals("八号")) {                      return;                  }                  super.insertString(offs, str, a);                  sizeList.setSelectedValue(sizeText.getText(), true);              }          };          sizeText.setDocument(doc);          previewText = new JTextField(20);          previewText.setHorizontalAlignment(JTextField.CENTER);          previewText.setEditable(false);          previewText.setBackground(Color.WHITE);          chinaButton = new JRadioButton("中文预览", true);          englishButton = new JRadioButton("英文预览");          numberButton = new JRadioButton("数字预览");          ButtonGroup bg = new ButtonGroup();          bg.add(chinaButton);          bg.add(englishButton);          bg.add(numberButton);          fontList = new JList(fontArray);          styleList = new JList(styleArray);          sizeList = new JList(sizeArray);          approveButton = new JButton("确定");          cancelButton = new JButton("取消");          Box box1 = Box.createHorizontalBox();          JLabel l1 = new JLabel("字体:");          JLabel l2 = new JLabel("字形:");          JLabel l3 = new JLabel("大小:");          l1.setPreferredSize(new Dimension(165, 14));          l1.setMaximumSize(new Dimension(165, 14));          l1.setMinimumSize(new Dimension(165, 14));          l2.setPreferredSize(new Dimension(95, 14));          l2.setMaximumSize(new Dimension(95, 14));          l2.setMinimumSize(new Dimension(95, 14));          l3.setPreferredSize(new Dimension(80, 14));          l3.setMaximumSize(new Dimension(80, 14));          l3.setMinimumSize(new Dimension(80, 14));          box1.add(l1);          box1.add(l2);          box1.add(l3);          Box box2 = Box.createHorizontalBox();          fontText.setPreferredSize(new Dimension(160, 20));          fontText.setMaximumSize(new Dimension(160, 20));          fontText.setMinimumSize(new Dimension(160, 20));          box2.add(fontText);          box2.add(Box.createHorizontalStrut(5));          styleText.setPreferredSize(new Dimension(90, 20));          styleText.setMaximumSize(new Dimension(90, 20));          styleText.setMinimumSize(new Dimension(90, 20));          box2.add(styleText);          box2.add(Box.createHorizontalStrut(5));          sizeText.setPreferredSize(new Dimension(80, 20));          sizeText.setMaximumSize(new Dimension(80, 20));          sizeText.setMinimumSize(new Dimension(80, 20));          box2.add(sizeText);          Box box3 = Box.createHorizontalBox();          JScrollPane sp1 = new JScrollPane(fontList);          sp1.setPreferredSize(new Dimension(160, 100));          sp1.setMaximumSize(new Dimension(160, 100));          sp1.setMaximumSize(new Dimension(160, 100));          box3.add(sp1);          box3.add(Box.createHorizontalStrut(5));          JScrollPane sp2 = new JScrollPane(styleList);          sp2.setPreferredSize(new Dimension(90, 100));          sp2.setMaximumSize(new Dimension(90, 100));          sp2.setMinimumSize(new Dimension(90, 100));          box3.add(sp2);          box3.add(Box.createHorizontalStrut(5));          JScrollPane sp3 = new JScrollPane(sizeList);          sp3.setPreferredSize(new Dimension(80, 100));          sp3.setMaximumSize(new Dimension(80, 100));          sp3.setMinimumSize(new Dimension(80, 100));          box3.add(sp3);          Box box4 = Box.createHorizontalBox();          Box box5 = Box.createVerticalBox();          JPanel box6 = new JPanel(new BorderLayout());          box5.setBorder(BorderFactory.createTitledBorder("字符集"));          box6.setBorder(BorderFactory.createTitledBorder("示例"));          box5.add(chinaButton);          box5.add(englishButton);          box5.add(numberButton);          box5.setPreferredSize(new Dimension(90, 95));          box5.setMaximumSize(new Dimension(90, 95));          box5.setMinimumSize(new Dimension(90, 95));          box6.add(previewText);          box6.setPreferredSize(new Dimension(250, 95));          box6.setMaximumSize(new Dimension(250, 95));          box6.setMinimumSize(new Dimension(250, 95));          box4.add(box5);          box4.add(Box.createHorizontalStrut(4));          box4.add(box6);          Box box7 = Box.createHorizontalBox();          box7.add(Box.createHorizontalGlue());          box7.add(approveButton);          box7.add(Box.createHorizontalStrut(5));          box7.add(cancelButton);          box.add(box1);          box.add(box2);          box.add(box3);          box.add(Box.createVerticalStrut(5));          box.add(box4);          box.add(Box.createVerticalStrut(5));          box.add(box7);          getContentPane().add(box);      }      /**       * 按照预设字体显示       */      private void setup() {          String fontName = font.getFamily();          int fontStyle = font.getStyle();          int fontSize = font.getSize();          /*           * 如果预设的文字大小在选择列表中,则通过选择该列表中的某项进行设值,否则直接将预设文字大小写入文本框           */          boolean b = false;          for (int i = 0; i < sizeArray.length; i++) {              if (sizeArray[i].equals(String.valueOf(fontSize))) {                  b = true;                  break;              }          }          if(b){              // 选择文字大小列表中的某项              sizeList.setSelectedValue(String.valueOf(fontSize), true);          }else{              sizeText.setText(String.valueOf(fontSize));          }          // 选择字体列表中的某项          fontList.setSelectedValue(fontName, true);          // 选择样式列表中的某项          styleList.setSelectedIndex(fontStyle);          // 预览默认显示中文字符          chinaButton.doClick();          // 显示预览          setPreview();      }      /**       * 添加所需的事件监听器       */      private void addListener() {          sizeText.addFocusListener(new FocusListener() {              public void focusLost(FocusEvent e) {                  setPreview();              }              public void focusGained(FocusEvent e) {                  sizeText.selectAll();              }          });          // 字体列表发生选择事件的监听器          fontList.addListSelectionListener(new ListSelectionListener() {              public void valueChanged(ListSelectionEvent e) {                  if (!e.getValueIsAdjusting()) {                      fontText.setText(String.valueOf(fontList.getSelectedValue()));                      // 设置预览                      setPreview();                  }              }          });          styleList.addListSelectionListener(new ListSelectionListener() {              public void valueChanged(ListSelectionEvent e) {                  if (!e.getValueIsAdjusting()) {                      styleText.setText(String.valueOf(styleList.getSelectedValue()));                      // 设置预览                      setPreview();                  }              }          });          sizeList.addListSelectionListener(new ListSelectionListener() {              public void valueChanged(ListSelectionEvent e) {                  if (!e.getValueIsAdjusting()) {                      if(!sizeText.isFocusOwner()){                          sizeText.setText(String.valueOf(sizeList.getSelectedValue()));                      }                      // 设置预览                      setPreview();                  }              }          });          // 编码监听器          EncodeAction ea = new EncodeAction();          chinaButton.addActionListener(ea);          englishButton.addActionListener(ea);          numberButton.addActionListener(ea);          // 确定按钮的事件监听          approveButton.addActionListener(new ActionListener() {              public void actionPerformed(ActionEvent e) {                  // 组合字体                  font = groupFont();                  // 设置返回值                  returnValue = APPROVE_OPTION;                  // 关闭窗口                  disposeDialog();              }          });          // 取消按钮事件监听          cancelButton.addActionListener(new ActionListener() {              public void actionPerformed(ActionEvent e) {                  disposeDialog();              }          });      }      /**       * 显示字体选择器       * @param owner 上层所有者       * @return 该整形返回值表示用户点击了字体选择器的确定按钮或取消按钮,参考本类常量字段APPROVE_OPTION和CANCEL_OPTION       */      public final int showFontDialog(JFrame owner) {          setLocationRelativeTo(owner);          setVisible(true);          return returnValue;      }      /**       * 返回选择的字体对象       * @return 字体对象       */      public final Font getSelectFont() {          return font;      }      /**       * 关闭窗口       */      private void disposeDialog() {      MyFont.this.removeAll();      MyFont.this.dispose();      }            /**       * 显示错误消息       * @param errorMessage 错误消息       */      private void showErrorDialog(String errorMessage) {          JOptionPane.showMessageDialog(this, errorMessage, "错误", JOptionPane.ERROR_MESSAGE);      }      /**       * 设置预览       */      private void setPreview() {          Font f = groupFont();          previewText.setFont(f);      }      /**       * 按照选择组合字体       * @return 字体       */      private Font groupFont() {          String fontName = fontText.getText();          int fontStyle = styleList.getSelectedIndex();          String sizeStr = sizeText.getText().trim();          // 如果没有输入          if(sizeStr.length() == 0) {              showErrorDialog("字体(大小)必须是有效“数值!");              return null;          }          int fontSize = 0;          // 通过循环对比文字大小输入是否在现有列表内          for (int i = 0; i < sizeArray.length; i++) {              if(sizeStr.equals(sizeArray[i])){                  fontSize = sizeIntArray[i];                  break;              }          }          // 没有在列表内          if (fontSize == 0) {              try{                  fontSize = Integer.parseInt(sizeStr);                  if(fontSize < 1){                      showErrorDialog("字体(大小)必须是有效“数值”!");                      return null;                  }              }catch (NumberFormatException nfe) {                  showErrorDialog("字体(大小)必须是有效“数值”!");                  return null;              }          }          return new Font(fontName, fontStyle, fontSize);      }            /**       * 编码选择事件的监听动作       *       */      class EncodeAction implements ActionListener {          public void actionPerformed(ActionEvent e) {              if (e.getSource().equals(chinaButton)) {                  previewText.setText(CHINA_STRING);              } else if (e.getSource().equals(englishButton)) {                  previewText.setText(ENGLISH_STRING);              } else {                  previewText.setText(NUMBER_STRING);              }          }      }        }  


原创粉丝点击