自己根据网上资料做的一个记事本,有些功能还不太完善。 | 您所在的位置:网站首页 › checkcase › 自己根据网上资料做的一个记事本,有些功能还不太完善。 |
这个记事本主要是在学习javaGUI及其基本知识后,参考网上资料做出。在制作过程中,同时也发现了java中lastIndex()方法存在不能准确删选数据的情况,然后自己进行了修改。 以下是代码部分: package com.Program;import java.awt.*;import java.awt.datatransfer.*; import javax.swing.*;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import javax.swing.event.MenuEvent;import javax.swing.event.MenuKeyEvent;import javax.swing.event.MenuKeyListener;import javax.swing.event.MenuListener;import javax.swing.undo.*; import java.awt.event.*;import java.io.*;import java.text.SimpleDateFormat;import java.util.Date;public class NoteBook extends JFrame implements ActionListener { JMenuBar bar;//菜单栏 JMenu menu1, menu2, menu3, menu4, menu5;//菜单 JPopupMenu menu6;//右键弹出菜单 JMenuItem menu10 ,menu11, menu12, menu13, menu14, menu15, menu16;//菜单一:子菜单 JMenuItem menu20 ,menu21, menu22, menu23, menu24, menu25, menu26, menu27, menu28, menu29, menu291;//菜单二:子菜单 JMenuItem menu31; JCheckBoxMenuItem menu30;//菜单三:子菜单 JCheckBoxMenuItem menu40;//菜单四:子菜单 JMenuItem menu50 ,menu51;//菜单五:子菜单 JMenuItem menu60 ,menu61 ,menu62 ,menu63 ,menu64 ,menu65 ;//右键弹出菜单子菜单 JTextArea textarea;//文本域 JScrollPane scroll;//滚动条 JLabel statusBar;//状态栏标签 Font font1;//字体 UndoManager undo;//撤销 Toolkit toolKit;//工具包 Clipboard clipboard;//剪贴板 JCheckBox checkCase;//查找下一个(F3) TextField searchContents = new TextField(15);//查找搜索框内内容 TextField field1 = new TextField(15);//替换搜索框内容 TextField field2 = new TextField(15);//替换内容 public static void main(String[] args) { NoteBook nob = new NoteBook(); } NoteBook(){ font1 = new Font("微软雅黑",Font.PLAIN,12);//设置字体 //实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement 方法将返回一系列的连续元素。 //UIManager 管理当前外观、可用外观集合、外观更改时被通知的 PropertyChangeListeners、外观默认值以及获取各种默认值的便捷方法。 //getDefaults()返回包含该默认值的 UIDefaults 对象。使用类文档中指定的逻辑解析返回的默认值, //Swing 组件的默认值表。应用程序可以通过 UIManager 设置/获取默认值 //UIManager.put(Object key, Object value);在开发人员默认值中存储一个对象。此方法是 getDefaults().put(key, value) 的一个覆盖方法。 //此方法仅对开发人员默认值有效,对系统默认值和外观默认值无效。 java.util.Enumeration keys = UIManager.getDefaults().keys(); while (keys.hasMoreElements()) { Object key = keys.nextElement(); Object value = UIManager.get(key); if (value instanceof javax.swing.plaf.FontUIResource) { UIManager.put(key, font1); } } undo = new UndoManager();//撤销操作创建了一个 UndoManager toolKit = Toolkit.getDefaultToolkit(); //获取默认工具包 //创建剪贴板对象,获取系统 Clipboard 的一个实例,该 Clipboard 可作为本机平台提供的剪贴板工具的接口 clipboard = toolKit.getSystemClipboard(); bar = new JMenuBar();//菜单栏 //设置文件菜单及其子菜单 menu1 = new JMenu("文件(F)"); menu1.setMnemonic(‘F‘);//设置快捷键Alt+F menu10 = new JMenuItem("新建(N)"); menu10.setMnemonic(‘N‘); menu10.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));//设置快捷键Ctrl+N menu10.addActionListener(this);//设置组件监听 menu11 = new JMenuItem("打开(O)"); menu11.setMnemonic(‘O‘); menu11.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); menu11.addActionListener(this); menu12 = new JMenuItem("保存(S)"); menu12.setMnemonic(‘S‘); menu12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); menu12.addActionListener(this); menu13 = new JMenuItem("另存为(A)"); menu13.setMnemonic(‘A‘); menu13.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); menu13.addActionListener(this); menu14 = new JMenuItem("页面设置(U)"); menu14.setMnemonic(‘U‘); menu14.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK)); menu14.addActionListener(this); menu15 = new JMenuItem("打印(P)"); menu15.setMnemonic(‘P‘); menu15.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK)); menu15.addActionListener(this); menu16 = new JMenuItem("退出(X)"); menu16.setMnemonic(‘X‘); menu16.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); menu16.addActionListener(this); //设置编辑菜单及其子菜单 menu2 = new JMenu("编辑(E)"); menu2.setMnemonic(‘E‘); menu20 = new JMenuItem("撤销(U)"); menu20.setMnemonic(‘U‘); menu20.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK)); menu20.addActionListener(this); menu21 = new JMenuItem("剪切(T)"); menu21.setMnemonic(‘T‘); menu21.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK)); menu21.addActionListener(this); menu22 = new JMenuItem("复制(C)"); menu22.setMnemonic(‘C‘); menu22.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); menu22.addActionListener(this); menu23 = new JMenuItem("粘贴(V)"); menu23.setMnemonic(‘V‘); menu23.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK)); menu23.addActionListener(this); menu24 = new JMenuItem("删除(L)"); menu24.setMnemonic(‘L‘); menu24.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0)); menu24.addActionListener(this); menu25 = new JMenuItem("查找(F)"); menu25.setMnemonic(‘F‘); menu25.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK)); menu25.addActionListener(this); menu26 = new JMenuItem("查找下一个(N)"); menu26.setMnemonic(‘N‘); menu26.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0)); menu26.addActionListener(this); menu27 = new JMenuItem("替换(R)"); menu27.setMnemonic(‘R‘); menu27.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK)); menu27.addActionListener(this); menu28 = new JMenuItem("转到(G)"); menu28.setMnemonic(‘G‘); menu28.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,InputEvent.CTRL_MASK)); menu28.addActionListener(this); menu29 = new JMenuItem("全选(A)"); menu29.setMnemonic(‘A‘); menu29.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); menu29.addActionListener(this); menu291 = new JMenuItem("时间/日期(D)"); menu291.setMnemonic(‘D‘); menu291.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0)); menu291.addActionListener(this); //格式菜单及其子菜单 menu3 = new JMenu("格式(O)"); menu3.setMnemonic(‘O‘); menu30 = new JCheckBoxMenuItem("自动换行(W)");//可以被选定或取消选定的菜单项 menu30.setMnemonic(‘W‘); menu30.setState(true);//默认自动转行为选定状态 menu30.addActionListener(this); menu31 = new JMenuItem("字体(F)"); menu31.setMnemonic(‘F‘); menu31.addActionListener(this); //查看菜单及子菜单 menu4 = new JMenu("查看(V)"); menu4.setMnemonic(‘V‘); menu40 = new JCheckBoxMenuItem("状态栏(S)"); menu40.setMnemonic(‘S‘); menu40.addActionListener(this); //帮助菜单及子菜单 menu5 = new JMenu("帮助(H)"); menu5.setMnemonic(‘U‘); menu50 = new JMenuItem("查看帮助(H)"); menu50.setMnemonic(‘H‘); menu50.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0)); menu50.addActionListener(this); menu51 = new JMenuItem("关于记事本(A)"); menu51.setMnemonic(‘A‘); menu51.addActionListener(this); //右键弹出菜单及子菜单 menu6 = new JPopupMenu(); menu60 = new JMenuItem("撤销(U)"); menu60.addActionListener(this); menu61 = new JMenuItem("剪切(X)"); menu61.addActionListener(this); menu62 = new JMenuItem("复制(C)"); menu62.addActionListener(this); menu63 = new JMenuItem("粘贴(V)"); menu63.addActionListener(this); menu64 = new JMenuItem("删除(L)"); menu64.addActionListener(this); menu65 = new JMenuItem("全选(A)"); menu65.addActionListener(this); //新建文本域和滚动条 textarea = new JTextArea(); textarea.setLineWrap(true);//自动转行为选定状态时,使textarea自动转行 //将UndoManager 并将它作为 UndoableEditListener 添加到 JTextArea textarea.getDocument().addUndoableEditListener(undo); scroll = new JScrollPane(textarea); //状态栏标签 statusBar = new JLabel("状态栏"); statusBar.setVisible(false); //向菜单添加组件 menu1.add(menu10); menu1.add(menu11); menu1.add(menu12); menu1.add(menu13); menu1.addSeparator(); menu1.add(menu14); menu1.add(menu15); menu1.addSeparator(); menu1.add(menu16); menu2.add(menu20); menu2.addSeparator(); menu2.add(menu21); menu2.add(menu22); menu2.add(menu23); menu2.add(menu24); menu2.addSeparator(); menu2.add(menu25); menu2.add(menu26); menu2.add(menu27); menu2.add(menu28); menu2.addSeparator(); menu2.add(menu29); menu2.add(menu291); menu3.add(menu30); menu3.add(menu31); menu4.add(menu40); menu5.add(menu50); menu5.addSeparator(); menu5.add(menu51); menu6.add(menu60); menu6.addSeparator(); menu6.add(menu61); menu6.add(menu62); menu6.add(menu63); menu6.add(menu64); menu6.addSeparator(); menu6.add(menu65); //向菜单栏添加菜单 bar.add(menu1); bar.add(menu2); bar.add(menu3); bar.add(menu4); bar.add(menu5); /*//设置菜单字体 menu1.setFont(font1); menu2.setFont(font1); menu3.setFont(font1); menu4.setFont(font1); menu5.setFont(font1);*/ //向JFrame添加组件 this.setJMenuBar(bar); this.add(scroll); this.add(statusBar,BorderLayout.SOUTH); //设置窗口 ImageIcon img1 = new ImageIcon("image/note.png"); this.setIconImage(img1.getImage()); this.setTitle("记事本"); this.setSize(600, 400); this.setLocation(300, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); //添加窗口监听事件,new WindowAdapter()接收窗口事件的抽象适配器类, //其下方法public void windowClosing(WindowEvent e) this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ windowExit();//调用窗口关闭时的方法 } }); //设置打开编辑菜单时调用功能可用性函数,实现各功能的可用性 menu2.addMenuListener(new MenuListener(){//添加菜单事件的侦听器 @Override public void menuCanceled(MenuEvent e) {//取消菜单时调用 functionAvailable();//调用编辑菜单功能可用性 } @Override public void menuDeselected(MenuEvent e) {//取消选择某个菜单时调用 functionAvailable(); } @Override public void menuSelected(MenuEvent e) {//选择某个菜单时调用 functionAvailable(); } }); //文本域点击右键出现菜单事件 //扩展此类可创建 MouseEvent(包括拖动和移动事件)或/和 MouseWheelEvent 侦听器,并针对所需事件重写方法 textarea.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e){ if(e.isPopupTrigger()){//返回此鼠标事件是否为该平台的弹出菜单触发事件 //e.getComponent()返回事件的始发者,e.get()返回事件相对于源组件的水平 x ,y坐标。 //在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单。 menu6.show(e.getComponent(),e.getX(), e.getY()); } functionAvailable(); } public void mouseReleased(MouseEvent e){ if(e.isPopupTrigger()){//返回此鼠标事件是否为该平台的弹出菜单触发事件 //e.getComponent()返回事件的始发者,e.get()返回事件相对于源组件的水平 x ,y坐标。 //在组件调用者的坐标空间中的位置 X、Y 显示弹出菜单。 menu6.show(e.getComponent(),e.getX(), e.getY()); } functionAvailable(); } }); } /*protected void processWindowEvent(WindowEvent e) { if (e.getID() == WindowEvent.WINDOW_CLOSING) System.out.println("ss");; //直接返回,阻止默认动作,阻止窗口关闭 }*/ //LastIndexOf方法替换 public int change(String strA,String strB,int index){ int k = -1; char[] chA = strA.toCharArray(); for (int i = 0; i < chA.length/2; i++) { char mg = chA[i]; chA[i] = chA[chA.length-1-i]; chA[chA.length-1-i] = mg; } char[] chB = strB.toCharArray(); for (int i = 0; i < chB.length/2; i++) { char mg = chB[i]; chB[i] = chB[chB.length-1-i]; chB[chB.length-1-i] = mg; } String strC = new String(chA); String strD = new String(chB); if(strC.indexOf(strD,strA.length()-1-index) != -1){ k = strA.length()-(strC.indexOf(strD,strA.length()-1-index)+strB.length()); } return k; } //设置各功能可用性 public void functionAvailable(){ if(textarea.getText().equals("")){//文本为空时查找一系列功能不可用 menu25.setEnabled(false); menu26.setEnabled(false); }else{ menu25.setEnabled(true); menu26.setEnabled(true); } if(textarea.getSelectedText() == null){//文本域选择内容为空时设置可用性 menu21.setEnabled(false); menu22.setEnabled(false); menu24.setEnabled(false); menu61.setEnabled(false); menu62.setEnabled(false); menu64.setEnabled(false); }else{ menu21.setEnabled(true); menu22.setEnabled(true); menu24.setEnabled(true); menu61.setEnabled(true); menu62.setEnabled(true); menu64.setEnabled(true); } if(clipboard.getContents(this) == null){//剪贴板可用性 menu23.setEnabled(false); menu63.setEnabled(false); }else{ menu23.setEnabled(true); menu63.setEnabled(true); } } public void windowExit(){//窗口关闭时的方法 String textAll = textarea.getText(); if(!textAll.equals("")){//文本域不为空 int choice = JOptionPane.showConfirmDialog(null, "你的文件尚未保存,是否保存?", "记事本",JOptionPane.YES_NO_CANCEL_OPTION ); if(choice == JOptionPane.NO_OPTION){//不保存,直接退出 System.exit(0); }else if(choice == JOptionPane.CANCEL_OPTION){//取消不做任何操作 this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); }else if(choice == JOptionPane.YES_OPTION){//保存文件,调用保存功能 JFileChooser jfl = new JFileChooser();//弹出一个针对用户主目录的文件选择器, jfl.setDialogTitle("保存"); jfl.showSaveDialog(null); jfl.setVisible(true); try{ String filePath = jfl.getSelectedFile().getAbsolutePath();//获取选择文件的绝对路径 PrintStream prins = new PrintStream(filePath);//创建具有指定文件且不带自动行刷新的新打印流 System.setOut(prins);//重新分配“标准”输出流public static void setOut(PrintStream out) System.out.println(this.textarea.getText());// }catch(Exception exception){ } } } } @Override public void actionPerformed(ActionEvent e) {//组件事件功能实现 if(e.getSource()==menu10){//文件菜单新建功能 String textAll = textarea.getText(); if(!textAll.equals("")){//文本域不为空 int choice = JOptionPane.showConfirmDialog(null, "你的文件尚未保存,是否保存?", "记事本",JOptionPane.YES_NO_CANCEL_OPTION ); if(choice == JOptionPane.NO_OPTION){//不保存,文本域内容置为空 textarea.setText(null); }else if(choice == JOptionPane.CANCEL_OPTION){//取消不做任何操作 }else if(choice == JOptionPane.YES_OPTION){//保存文件,调用保存功能 JFileChooser jfl = new JFileChooser();//弹出一个针对用户主目录的文件选择器, jfl.setDialogTitle("保存"); jfl.showSaveDialog(null); jfl.setVisible(true); try{ String filePath = jfl.getSelectedFile().getAbsolutePath();//获取选择文件的绝对路径 PrintStream prins = new PrintStream(filePath);//创建具有指定文件且不带自动行刷新的新打印流 System.setOut(prins);//重新分配“标准”输出流public static void setOut(PrintStream out) System.out.println(this.textarea.getText());// }catch(Exception exception){ } } } }else if(e.getSource()==menu11){//文件菜单打开功能 JFileChooser jfl = new JFileChooser(); jfl.setDialogTitle("打开文件"); jfl.showOpenDialog(null); jfl.setVisible(true); FileReader fileFlow = null; BufferedReader bufferedStream = null; try{ String filePath = jfl.getSelectedFile().getAbsolutePath(); fileFlow = new FileReader(filePath);//在给定从中读取数据的 File 的情况下创建一个新 FileReader bufferedStream =new BufferedReader(fileFlow);//创建一个使用默认大小输入缓冲区的缓冲字符输入流 String rolText = "",allText = ""; while((rolText = bufferedStream.readLine()) != null){//当不为空时,一行一行的读取文件中的字符 allText += rolText+" "; } textarea.setText(allText); }catch(Exception exception){ }finally{ try{//关闭流 fileFlow.close(); bufferedStream.close(); }catch(Exception exception){ } } }else if(e.getSource() == menu12){//文件菜单保存功能 JFileChooser jfl = new JFileChooser(); jfl.setDialogTitle("保存"); jfl.showSaveDialog(null); jfl.setVisible(true); try{ String filePath = jfl.getSelectedFile().getAbsolutePath(); PrintStream prins = new PrintStream(filePath); System.setOut(prins); System.out.println(this.textarea.getText()); }catch(Exception exception){ } }else if(e.getSource() == menu13){//文件菜单另存为功能 JFileChooser jfl = new JFileChooser(); jfl.setDialogTitle("另存为"); jfl.showSaveDialog(null); jfl.setVisible(true); try{ String filePath = jfl.getSelectedFile().getAbsolutePath(); PrintStream prins = new PrintStream(filePath); System.setOut(prins); System.out.println(this.textarea.getText()); }catch(Exception exception){ } }else if(e.getSource() == menu14){//文件菜单页面设置功能 JOptionPane.showMessageDialog(null,"吾学识有限,尚不能实现该功能,还望见谅!","页面设置",JOptionPane.INFORMATION_MESSAGE); }else if(e.getSource() == menu15){//文件菜单打印功能 JOptionPane.showMessageDialog(null,"吾学识有限,仍不能实现该功能,吾将继续学习!","打印",JOptionPane.INFORMATION_MESSAGE); }else if(e.getSource() == menu16){//文件菜单退出功能 String textAll = textarea.getText(); if(!textAll.equals("")){//文本域不为空 int choice = JOptionPane.showConfirmDialog(null, "你的文件尚未保存,是否保存?", "记事本",JOptionPane.YES_NO_CANCEL_OPTION ); if(choice == JOptionPane.NO_OPTION){//不保存,文本域内容置为空 System.exit(0); }else if(choice == JOptionPane.CANCEL_OPTION){//取消不做任何操作 }else if(choice == JOptionPane.YES_OPTION){//保存文件,调用保存功能 JFileChooser jfl = new JFileChooser(); jfl.setDialogTitle("保存"); jfl.showSaveDialog(null); jfl.setVisible(true); try{ String filePath = jfl.getSelectedFile().getAbsolutePath(); PrintStream prins = new PrintStream(filePath); System.setOut(prins); System.out.println(this.textarea.getText()); }catch(Exception exception){ } } }else{ System.exit(0); } }else if(e.getSource() == menu20 || e.getSource() == menu60){//撤销功能的实现 if(undo.canUndo()){ try{ undo.undo(); }catch(Exception exception){ } }else if(!undo.canUndo()){ } }else if(e.getSource() == menu21 || e.getSource() == menu61){//剪切功能的实现 String textSlected = textarea.getSelectedText();//获取选择的文本 StringSelection selection = new StringSelection(textSlected);//创建能传输指定 String 的 Transferable //将剪贴板的当前内容设置到指定的 transferable 对象,并将指定的剪贴板所有者作为新内容的所有者注册。 clipboard.setContents(selection, null); if(textSlected != null && textSlected.length() != 0){//textSlected为空时,textSlected.length报错 //用指定替换文本替换指定开始位置与结束位置之间的文本 textarea.replaceRange("", textarea.getSelectionStart(),textarea.getSelectionEnd()); }else{ return; } }else if(e.getSource() == menu22 || e.getSource() == menu62){//复制功能的实现 String textSlected = textarea.getSelectedText();//获取选择的文本 StringSelection selection = new StringSelection(textSlected); clipboard.setContents(selection, null); }else if(e.getSource() == menu23 || e.getSource() == menu63){//粘贴功能的实现 Transferable selection = clipboard.getContents(this);//获取剪贴板当前内容的 transferable 对象 String change = null; try{ //DataFlavor 表示 Java Unicode String 类,getTransferData返回一个对象,该对象表示将要被传输的数据 change = (String)selection.getTransferData(DataFlavor.stringFlavor); }catch(Exception e1){ } if(change != null){ //如果剪贴板内容不为空,则替换所选字符串 textarea.replaceRange(change, textarea.getSelectionStart(),textarea.getSelectionEnd()); }else{ return; } }else if(e.getSource() == menu24 || e.getSource() == menu64){//删除功能的实现 //将所选字符串用""代替 textarea.replaceRange("", textarea.getSelectionStart(),textarea.getSelectionEnd()); }else if(e.getSource() == menu25){//查找功能的实现 final JDialog dialog = new JDialog(this,"查找",false); //dialog.setLayout(new FlowLayout())不存在FlowLayout.LEFT功能,故需要生成一个Container Container content=dialog.getContentPane();//返回此对话框的contentPane对象 ,Container contentPane content.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置左对齐 JLabel search = new JLabel("查找内容(N):"); final JButton searchNext = new JButton("查找下一个(F)"); checkCase = new JCheckBox("区分大小写(C)"); //ButtonGroup把单选按钮放进一个组里,默认功能是组里按钮只能选一个 ButtonGroup btg = new ButtonGroup(); final JRadioButton upButton = new JRadioButton("向上(U)"); final JRadioButton downButton = new JRadioButton("向下(D)"); upButton.setSelected(true); btg.add(downButton); btg.add(upButton); //创建一个放置向上向下按钮的JPanel面板 JPanel dirPanel = new JPanel(); //设置dirPanel的边框,BorderFactory边框工厂,createTitledBorder("方向")为创建一个空标题的新标题边框, //使其具有指定的边框对象、默认的文本位置(位于顶线上)、默认的调整 (leading),以及默认的字体和文本颜色(由当前外观确定)。 dirPanel.setBorder(BorderFactory.createTitledBorder("方向")); dirPanel.add(upButton); dirPanel.add(downButton); JButton cancel = new JButton("取消"); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); JPanel panel3 = new JPanel(); panel3.add(searchNext); panel3.add(cancel); panel3.setLayout(new GridLayout(2,1,0,10)); panel1.add(search); panel1.add(searchContents); panel1.add(panel3); panel2.add(checkCase); panel2.add(dirPanel); dialog.add(panel1); dialog.add(panel2); dialog.setBounds(500, 500, 450,180); dialog.setResizable(false); dialog.setVisible(true); //组件监听 //取消按钮操作 cancel.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { //释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源;并且dialog需要定义为final dialog.dispose(); } }); //搜索框默认为空时设置searchNext不可用 if(searchContents.getText().equals("")){ searchNext.setEnabled(false); } //监听searchContents内容变化时,如果没有内容searchNext为不可用,否则可用 searchContents.addTextListener(new TextListener(){ @Override public void textValueChanged(TextEvent arg0) { if(!searchContents.getText().equals("")){ searchNext.setEnabled(true); }else{ searchNext.setEnabled(false); } } }); //监听查找下一个按钮 searchNext.addActionListener(new ActionListener(){ private int messageType; @Override public void actionPerformed(ActionEvent e) { int k = 0; String str1 , str2 , str3 , str4 ; str1 = textarea.getText(); str2 = searchContents.getText(); if(checkCase.isSelected()){//如果勾选了区分大小写按钮,则不做任何转换 str3 = str1; str4 = str2; }else{//如果不区分大小写,则将其统一转换为大写或者小写 str3 = str1.toUpperCase(); str4 = str2.toUpperCase(); } if(upButton.isSelected()){ if(textarea.getSelectedText() == null){//从光标位置开始查找 //System.out.println(textarea.getCaretPosition()); //textarea.getCaretPosition()获取光标末尾或者选中文本末尾的对应值, //该值从0到字符个数之间变化,所有字符前为0,光标向后移动一个字符依次向后加一 //k是查找内容的索引值,光标位于其之前时,其值与此时的CaretPosition值一样 //但lastIndexOf有bug查找时只要光标索引值>=包含所查找字符串的第一个字符的索引值就会默认查找 k =change(str3,str4,textarea.getCaretPosition()-1); //k = str3.lastIndexOf(str4,textarea.getCaretPosition()-1); //System.out.println(textarea.getCaretPosition()); //System.out.println(k); }else{//从选中文本开始查找, textarea.getSelectedText().length()为选中文本长度 k =change(str3,str4, textarea.getCaretPosition()- textarea.getSelectedText().length()-1); //k = str3.lastIndexOf(str4, textarea.getCaretPosition()- searchContents.getText().length()-1 ); //System.out.println(k); System.out.println(textarea.getCaretPosition()); System.out.println(searchContents.getText().length()); System.out.println(textarea.getCaretPosition()- searchContents.getText().length()-1); } if(k != -1){ textarea.setCaretPosition(k);// textarea.select(k, k+searchContents.getText().length()); }else{ //定义str5 为“找不到(查找内容)”的显示 String str5 = "找不到""+searchContents.getText()+"""; //设置弹出框 JOptionPane.showMessageDialog(null, str5,"记事本",JOptionPane.WARNING_MESSAGE); } }else if(downButton.isSelected()){ //向下寻找时不管是光标(getCaretPosition()值为光标右边字符的位数) //还是选中字符串(getCaretPosition()值为选中字符串最后一位字符的位数) //其开始寻找位置的索引值为(getCaretPosition()值+1)的字符的索引即值-1,即getCaretPosition() k = str3.indexOf(str4,textarea.getCaretPosition()); /*if(textarea.getSelectedText() == null){ k = str3.indexOf(str4,textarea.getCaretPosition()); System.out.println(textarea.getCaretPosition()); }else{ k = str3.indexOf(str4, textarea.getCaretPosition()); System.out.println(textarea.getCaretPosition()); }*/ if(k != -1){ textarea.setCaretPosition(k);// textarea.select(k, k+searchContents.getText().length()); }else{ String str5 = "找不到""+searchContents.getText()+"""; JOptionPane.showMessageDialog(null, str5,"记事本",JOptionPane.WARNING_MESSAGE); } } } }); }else if(e.getSource() == menu26){ if(!searchContents.getText().equals("")){ int k = 0; String str1 , str2 , str3 , str4 ; str1 = textarea.getText(); str2 = searchContents.getText(); if(checkCase.isSelected()){//如果勾选了区分大小写按钮,则不做任何转换 str3 = str1; str4 = str2; }else{//如果不区分大小写,则将其统一转换为大写或者小写 str3 = str1.toUpperCase(); str4 = str2.toUpperCase(); } k = str3.indexOf(str4,textarea.getCaretPosition()); if(k != -1){ textarea.setCaretPosition(k);// textarea.select(k, k+searchContents.getText().length()); }else{ String str5 = "找不到""+searchContents.getText()+"""; JOptionPane.showMessageDialog(null, str5,"记事本",JOptionPane.WARNING_MESSAGE); } } }else if(e.getSource() == menu27){ System.out.println("3"); //创建查找对话框 final JDialog dialog = new JDialog(this,"查找",false); JLabel searchContent = new JLabel("查找内容(N)"); JLabel replace = new JLabel("替换为(P)"); final JButton buttonSearch = new JButton("查找下一个(F)"); final JButton buttonReplace = new JButton("替换(R)"); final JButton buttonAll = new JButton("全部替换(A)"); JButton buttonCancel = new JButton("取消"); final JCheckBox checkCase = new JCheckBox("区分大小写(C)"); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); JPanel panel3 = new JPanel(); JPanel panel4 = new JPanel(); panel1.setLayout(new GridLayout(2,1,0,30)); panel1.add(searchContent); panel1.add(replace); panel2.setLayout(new GridLayout(2,1,0,30)); panel2.add(field1); panel2.add(field2); panel3.setLayout(new GridLayout(4,1,0,8)); panel3.add(buttonSearch); panel3.add(buttonReplace); panel3.add(buttonAll); panel3.add(buttonCancel); //panel4.setLayout(new GridLayout(1,3)); panel4.add(panel1,BorderLayout.WEST); panel4.add(panel2,BorderLayout.CENTER); panel4.add(panel3,BorderLayout.EAST); dialog.setLayout(new BorderLayout()); dialog.add(panel4,BorderLayout.CENTER); dialog.add(checkCase,BorderLayout.SOUTH); dialog.setBounds(500, 500, 400,190); dialog.setResizable(false); dialog.setVisible(true); //组件监听 //取消按钮操作 buttonCancel.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { //释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源;并且dialog需要定义为final dialog.dispose(); } }); //搜索框默认为空时设置searchNext不可用 if(field1.getText().equals("")){ buttonSearch.setEnabled(false); buttonReplace.setEnabled(false); buttonAll.setEnabled(false); } //监听field1内容变化时,如果没有内容buttonSearch、buttonReplace、buttonAll为不可用,否则可用 field1.addTextListener(new TextListener(){ @Override public void textValueChanged(TextEvent arg0) { if(!field1.getText().equals("")){ buttonSearch.setEnabled(true); buttonReplace.setEnabled(true); buttonAll.setEnabled(true); }else{ buttonSearch.setEnabled(false); buttonReplace.setEnabled(false); buttonAll.setEnabled(false); } } }); //监听查找下一个按钮 buttonSearch.addActionListener(new ActionListener(){ private int messageType; @Override public void actionPerformed(ActionEvent e) { int k = 0; String str1 , str2 , str3 , str4 ; str1 = textarea.getText(); str2 = field1.getText(); if(checkCase.isSelected()){//如果勾选了区分大小写按钮,则不做任何转换 str3 = str1; str4 = str2; }else{//如果不区分大小写,则将其统一转换为大写或者小写 str3 = str1.toUpperCase(); str4 = str2.toUpperCase(); } k = str3.indexOf(str4,textarea.getCaretPosition()); if(k != -1){ textarea.setCaretPosition(k);// textarea.select(k, k+field1.getText().length()); }else{ String str5 = "找不到""+field1.getText()+"""; JOptionPane.showMessageDialog(null, str5,"记事本",JOptionPane.WARNING_MESSAGE); } } }); //替换按钮监听事件 buttonReplace.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { int k = 0; String str1 , str2 , str3 , str4 ,str5 ,str6 ,str7 ,str8; str1 = textarea.getText(); str2 = field1.getText(); str3 = textarea.getSelectedText();//没有选择为空 str4 = field2.getText(); if(checkCase.isSelected()){//如果勾选了区分大小写按钮,则不做任何转换 str5 = str1; str6 = str2; if(str3 == null){//str3空处理 str7 = ""; }else{ str7 = str3; } str8 = str4; }else{//如果不区分大小写,则将其统一转换为大写或者小写 str5 = str1.toUpperCase(); str6 = str2.toUpperCase(); if(str3 == null){ str7 = ""; }else{ str7 = str3.toUpperCase(); } str8 = str4.toUpperCase(); } if(!str7.equals("") && str7.equals(str6) ){ textarea.replaceSelection(field2.getText()); } k = str5.indexOf(str6,textarea.getCaretPosition()); if(k != -1){ textarea.setCaretPosition(k);// textarea.select(k, k+field1.getText().length()); }else{ String str9 = "找不到""+field1.getText()+"""; JOptionPane.showMessageDialog(null, str9,"记事本",JOptionPane.WARNING_MESSAGE); } }}); //全部替换按钮监听事件 buttonAll.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { int k = 0; while(k != -1){ String str1 , str2 , str3 , str4 ,str5 ,str6 ; str1 = textarea.getText(); str2 = field1.getText(); str3 = field2.getText(); if(checkCase.isSelected()){//如果勾选了区分大小写按钮,则不做任何转换 str4 = str1; str5 = str2; str6 = str3; }else{//如果不区分大小写,则将其统一转换为大写或者小写 str4 = str1.toUpperCase(); str5 = str2.toUpperCase(); str6 = str3.toUpperCase(); } textarea.setCaretPosition(0);//将光标放置文本开头 //注意循环时str4,str5值未改变,但实际应该改变,所以str4,str5应该放在循环内 k = str4.indexOf(str5,textarea.getCaretPosition()); if(k != (-1)){ textarea.setCaretPosition(k); //textarea.select(k, k+field1.getText().length()); //textarea.replaceSelection(field2.getText()); textarea.replaceRange(field2.getText(), k, k+field1.getText().length()); } } } }); }else if(e.getSource() == menu28){//设置转到事件 JOptionPane.showMessageDialog(null,"该功能尚未实现,同志仍需努力","转到",JOptionPane.INFORMATION_MESSAGE); }else if(e.getSource() == menu29 || e.getSource() == menu65){//设置全选 textarea.selectAll(); }else if(e.getSource() == menu291){//设置日期事件 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 textarea.insert(df.format(new Date()), textarea.getText().length());// new Date()为获取当前系统时间 }else if(e.getSource() == menu30){//设置自动转行事件 if(menu30.getState()){ textarea.setLineWrap(true); }else{ textarea.setLineWrap(false); } }else if(e.getSource() == menu31){//设置字体 final JDialog fontdialog = new JDialog(this,"字体",true); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); JPanel panel3 = new JPanel(); JPanel panel4 = new JPanel(); JPanel panel5 = new JPanel(); JPanel panel6 = new JPanel(); JLabel fontStyle = new JLabel("字体(F):"); //设置此组件的首选大小,Dimension 类封装单个对象中组件的宽度和高度(精确到整数) //fontStyle.setPreferredSize(new Dimension(100,20)); //fontStyle.setSize(100, 20); final JTextField textStyle = new JTextField(11); //textStyle.setPreferredSize(new Dimension(50,20)); //GraphicsEnvironment 类描述了 Java(tm) 应用程序在特定平台上可用的 GraphicsDevice 对象和 Font 对象的集合。 //getLocalGraphicsEnvironment()返回本地 GraphicsEnvironment。 GraphicsEnvironment gre = GraphicsEnvironment.getLocalGraphicsEnvironment(); //返回一个包含此 GraphicsEnvironment 中所有字体系列名称的数组,它针对默认语言环境进行了本地化,由 Locale.getDefault() 返回。 String[] stl = gre.getAvailableFontFamilyNames(); final JList styleList = new JList(stl); styleList.setFixedCellHeight(20);//设置一个固定值,将用于列表中每个单元的高度。 styleList.setFixedCellWidth(108);//设置一个固定值,将用于列表中每个单元的宽度。 JScrollPane scroStyle = new JScrollPane(styleList); JLabel fontsBold = new JLabel("字形(Y):"); final JTextField textBold = new JTextField(8); String[] bol = {"常规","倾斜","粗体","粗体 倾斜"}; final JList boldList = new JList(bol); boldList.setFixedCellHeight(20);//设置一个固定值,将用于列表中每个单元的高度。 boldList.setFixedCellWidth(76);//设置一个固定值,将用于列表中每个单元的宽度。 JScrollPane scroBold = new JScrollPane(boldList); //设置滚动条一直可见 scroBold.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS ); JLabel fontSize = new JLabel("大小(S):"); final JTextField textSize = new JTextField(5); String[] sil = {"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"}; //"初号","小初","一号","小一","二号","小二","三号","小三","四号","小四","五号","小五","六号","小六","七号","八号"现不能对应整数磅值 final JList sizeList = new JList(sil); sizeList.setFixedCellHeight(20);//设置一个固定值,将用于列表中每个单元的高度。 sizeList.setFixedCellWidth(40);//设置一个固定值,将用于列表中每个单元的宽度。 JScrollPane scroSize = new JScrollPane(sizeList); final JLabel example = new JLabel("你看!"); JButton affirmButton = new JButton("确认"); JButton cancelButton = new JButton("取消"); //panel1.setLayout(new BorderLayout()); panel1.add(fontStyle); panel1.add(textStyle); panel1.add(scroStyle); panel1.setPreferredSize(new Dimension(140,250)); //panel2.setLayout(new BorderLayout()); panel2.add(fontsBold); panel2.add(textBold); panel2.add(scroBold); panel2.setPreferredSize(new Dimension(110,250)); //panel3.setLayout(new BorderLayout()); panel3.add(fontSize); panel3.add(textSize); panel3.add(scroSize); panel3.setPreferredSize(new Dimension(80,250)); panel4.setLayout(new FlowLayout()); panel4.add(panel1); panel4.add(panel2); panel4.add(panel3); panel5.add(example); panel5.setBorder(BorderFactory.createTitledBorder("示例")); panel5.setPreferredSize(new Dimension(250,120)); //panel6.setLayout(new GridLayout(1,2)); panel6.add(affirmButton); panel6.add(cancelButton); panel6.setPreferredSize(new Dimension(250,50)); fontdialog.setLayout(new FlowLayout()); fontdialog.add(panel4); fontdialog.add(panel5); fontdialog.add(panel6); //取消按钮事件 cancelButton.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { fontdialog.dispose(); } }); Font currentFont = textarea.getFont(); textStyle.setText(currentFont.getFontName()); textStyle.selectAll(); String str = String.valueOf(currentFont.getStyle());//返回 int 参数的字符串表示形式。 textBold.setText(str); textBold.selectAll(); String str1 = String.valueOf(currentFont.getSize()); textSize.setText(str1); //设置textStyle对应的字体表示 if(currentFont.getStyle()==Font.PLAIN){ textBold.setText("常规"); }else if(currentFont.getStyle()==Font.BOLD){ textBold.setText("粗体"); }else if(currentFont.getStyle()==Font.ITALIC){ textBold.setText("斜体"); }else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC)){ textBold.setText("粗斜体"); } //根据文本域字体初始值设置boldList选中下标索引值,不然当boldList未选中时。其下标值为-1; if(currentFont.getStyle()==Font.PLAIN){ boldList.setSelectedIndex(0); }else if(currentFont.getStyle()==Font.BOLD){ boldList.setSelectedIndex(1); }else if(currentFont.getStyle()==Font.ITALIC){ boldList.setSelectedIndex(2); }else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC)){ boldList.setSelectedIndex(3); } //定义一个数组,其下标值对应字体格式style final int style[] = {Font.PLAIN,Font.BOLD,Font.ITALIC,Font.BOLD+Font.ITALIC}; styleList.addListSelectionListener(new ListSelectionListener(){//字体名称列表事件 @Override public void valueChanged(ListSelectionEvent e) { // getSelectedValue()返回最小的选择单元索引的值;只选择了列表中单个项时,返回所选值 textStyle.setText((String) styleList.getSelectedValue()); //textStyle.selectAll(); //根据指定名称、样式和磅值大小,创建一个新 Font。 System.out.println(); example.setFont(new Font(textStyle.getText(),style[boldList.getSelectedIndex()],Integer.parseInt(textSize.getText()))); } }); boldList.addListSelectionListener(new ListSelectionListener(){//字体格式列表事件 @Override public void valueChanged(ListSelectionEvent e) { // getSelectedValue()返回最小的选择单元索引的值;只选择了列表中单个项时,返回所选值 textBold.setText((String) boldList.getSelectedValue()); //textStyle.selectAll(); example.setFont(new Font(textStyle.getText(),style[boldList.getSelectedIndex()],Integer.parseInt(textSize.getText()))); } }); sizeList.addListSelectionListener(new ListSelectionListener(){//字体尺寸列表事件 @Override public void valueChanged(ListSelectionEvent e) { // getSelectedValue()返回最小的选择单元索引的值;只选择了列表中单个项时,返回所选值 textSize.setText((String) sizeList.getSelectedValue()); //textStyle.selectAll(); example.setFont(new Font(textStyle.getText(),style[boldList.getSelectedIndex()],Integer.parseInt(textSize.getText()))); } }); affirmButton.addActionListener(new ActionListener(){//确定按钮 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub textarea.setFont(example.getFont()); fontdialog.dispose(); } }); fontdialog.setSize(380, 460); fontdialog.setLocation(500,500); fontdialog.setResizable(false); fontdialog.setVisible(true); }else if(e.getSource() == menu40){ if(menu40.getState()){ statusBar.setVisible(true); }else{ statusBar.setVisible(false); } //JOptionPane.showMessageDialog(null, "非常遗憾,该功能我不会O(∩_∩)O","状态栏",JOptionPane.WARNING_MESSAGE); }else if(e.getSource() == menu50){ JOptionPane.showMessageDialog(null, "非常抱歉,没人可以帮助你,放弃吧","帮助",JOptionPane.WARNING_MESSAGE); }else if(e.getSource() == menu51){ JOptionPane.showMessageDialog(null, "秋山寒叶似飘零,南国归雁北国情&春风缱绻月西楼,独倚空楼寄闲愁。"+" " +"谁家东窗难掩愁,随风飘到声尽头。&空山久待降飞霜,朔夜孤寒裹银装。"+" " +"&久闻此山慕名临,长叹他乡唏嘘离。&空城败旗倒金戈,万家灯火向谁国。"+" " +"&浮生偷得半日闲,细温红楼把酒沾。&暗夜香袭床前枕,古曲悠悠落雨声。", "状态栏",JOptionPane.INFORMATION_MESSAGE); } }} |
CopyRight 2018-2019 实验室设备网 版权所有 |