diff --git a/src/NoteBook/FileFunction.java b/src/NoteBook/FileFunction.java new file mode 100644 index 0000000000000000000000000000000000000000..03aabb3488ddc90f115f7c17d477dc9672c50f46 --- /dev/null +++ b/src/NoteBook/FileFunction.java @@ -0,0 +1,116 @@ +package NoteBook; + +import javax.swing.*; +import javax.swing.filechooser.FileNameExtensionFilter; +import java.awt.*; +import java.io.*; + +public class FileFunction { + //打开文件 + public void openFile(JFrame frame, JTextArea ta) { + //创建文件选取器 + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setDialogTitle("打开文件..."); + //默认选取当前文件 + fileChooser.setCurrentDirectory(new File(".")); + //设置文件选择的模式 + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + //设置不允许多选 + fileChooser.setMultiSelectionEnabled(false); + //设置文件过滤器 + fileChooser.setFileFilter(new FileNameExtensionFilter("txt(*.txt)", "txt")); + //显示打开文件选择的窗口 + int isNewFile = fileChooser.showOpenDialog(frame); + //当前选择的文件 + File saveFileName = fileChooser.getSelectedFile(); + //返回1则代表选择了取消按钮或直接关闭该窗口 + if (isNewFile == 1) { + return; + }//下面代表返回零,说明已经选择了某个文件,会执行相关操作 + if (isNewFile == JFileChooser.APPROVE_OPTION) { + String filename = fileChooser.getSelectedFile().getAbsolutePath(); +// System.out.println(filename); + FileReader fr = null; + BufferedReader br = null; + try { + fr = new FileReader(filename); + br = new BufferedReader(fr); + //从文件中循环读取,并显示到文本区中 + String s = ""; + String allCon = ""; + while ((s = br.readLine()) != null) { + allCon += s + "\r\n"; + + } + //放置到ta中 + ta.setText(allCon); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + try { + fr.close(); + br.close(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + frame.setTitle(saveFileName.getName() + " -记事本"); + } + + } + + + //保存文件 + public static void saveFile(JFrame frame, JTextArea textArea) { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setDialogTitle("保存"); + fileChooser.setCurrentDirectory(new File(".")); + //设置打开文件选择框后默认输入的文件名 + fileChooser.setSelectedFile(new File("文本文档.txt")); + //打开文件选择框 + int open = fileChooser.showSaveDialog(frame); + if (open == JFileChooser.APPROVE_OPTION) { + File f = fileChooser.getSelectedFile(); + try { + //覆盖文件写入 + FileOutputStream os = new FileOutputStream(f); + String s = textArea.getText(); + byte[] a = s.getBytes(); + os.write(a); + //关闭流 + os.close(); + frame.setTitle(f.getName() + "-记事本"); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public void saveAsFile(Frame frame, JTextArea ta) { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setDialogTitle("另存为..."); + fileChooser.setCurrentDirectory(new File(".")); + fileChooser.setSelectedFile(new File("新建记事本.txt")); + //打开文件选择框 + int open = fileChooser.showSaveDialog(frame); + if (open == JFileChooser.APPROVE_OPTION) { + //保留文本内容 + File f = fileChooser.getSelectedFile(); + try { + //覆盖文件写入 + FileOutputStream os = new FileOutputStream(f); + String s = ta.getText(); + byte[] a = s.getBytes(); + os.write(a); + //关闭流 + os.close(); + frame.setTitle(f.getName() + "-记事本"); + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/NoteBook/FontSetFunction.java b/src/NoteBook/FontSetFunction.java new file mode 100644 index 0000000000000000000000000000000000000000..18fda35270959e0310fac287ca68bde520ab64cd --- /dev/null +++ b/src/NoteBook/FontSetFunction.java @@ -0,0 +1,200 @@ +package NoteBook; + +import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class FontSetFunction { + public void fontSet(JFrame frame,JTextArea jTextArea){ + //创建字体设置对话框 + JDialog fontDialog=new JDialog(frame,"字体设置",false); + + //创建容器container并设置布局 + Container container = fontDialog.getContentPane(); + container.setLayout(new FlowLayout(FlowLayout.LEFT)); + + //创建标签并设置大小 + JLabel fonts = new JLabel("字体:"); + fonts.setPreferredSize(new Dimension(100, 20)); + fonts.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JLabel style = new JLabel("风格:"); + style.setPreferredSize(new Dimension(100, 20)); + style.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JLabel size = new JLabel("大小:"); + size.setPreferredSize(new Dimension(100, 20)); + size.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JLabel example = new JLabel("JAVA实验"); + example.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 12)); + + //创建文本框,显示所选内容 + JTextField fontText = new JTextField(9); + fontText.setPreferredSize(new Dimension(200, 20)); + JTextField styleText = new JTextField(8); + styleText.setPreferredSize(new Dimension(200, 20)); + JTextField sizeText = new JTextField(5); + sizeText.setPreferredSize(new Dimension(200, 20)); + + //创建按钮并设置大小 + JButton ok = new JButton("确定"); + ok.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13)); + JButton no = new JButton("取消"); + no.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13)); + JButton fontColor=new JButton("字体颜色"); + fontColor.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 12)); + + //获取系统字体库 + GraphicsEnvironment e=GraphicsEnvironment.getLocalGraphicsEnvironment(); + String[] fontFamilyNames=e.getAvailableFontFamilyNames(); + String fontStyle[]=new String[]{"常规","粗体","斜体","粗斜体"}; + int styleChoice[] = { Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD + Font.ITALIC }; + Integer[] fontSize=new Integer[] {8,9,10,11,12,13,14,16,18,20,22,24,26,28,30,32,36,48,72}; + + //创建文本栏并设置大小 + JList fontList=new JList(fontFamilyNames); + fontList.setFixedCellWidth(90); + fontList.setFixedCellHeight(22); + JList styleList=new JList(fontStyle); + styleList.setFixedCellWidth(90); + styleList.setFixedCellHeight(22); + JList sizeList=new JList(fontSize); + sizeList.setFixedCellWidth(45); + sizeList.setFixedCellHeight(22); + + //将文本栏设置成单选模式 + fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + styleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + sizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + + + //判断当前字体形式 + Font currentFont = jTextArea.getFont(); + fontText.setText(currentFont.getFontName()); + fontText.selectAll(); + + //判断当前字体风格 + if (currentFont.getStyle() == Font.PLAIN){ + styleText.setText("常规"); + }else if (currentFont.getStyle() == Font.BOLD){ + styleText.setText("粗体"); + }else if (currentFont.getStyle() == Font.ITALIC){ + styleText.setText("斜体"); + }else if (currentFont.getStyle() == (Font.BOLD + Font.ITALIC)){ + styleText.setText("粗斜体"); + } + styleText.selectAll(); + + //判断当前字体的大小 + String str = String.valueOf(currentFont.getSize()); + sizeText.setText(str); + sizeText.selectAll(); + + //文本栏标中当前字体风格 + if (currentFont.getStyle() == Font.PLAIN) + styleList.setSelectedIndex(0); + else if (currentFont.getStyle() == Font.BOLD) + styleList.setSelectedIndex(1); + else if (currentFont.getStyle() == Font.ITALIC) + styleList.setSelectedIndex(2); + else if (currentFont.getStyle() == (Font.BOLD + Font.ITALIC)) + styleList.setSelectedIndex(3); + + //文本栏注册监听器,监听内容选中事件 + fontList.addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent event) { + fontText.setText(fontFamilyNames[fontList.getSelectedIndex()]); + fontText.selectAll(); + Font exampleFont1 = new Font(fontText.getText(), styleChoice[styleList.getSelectedIndex()], + Integer.parseInt(sizeText.getText())); + example.setFont(exampleFont1); + } + }); + styleList.addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent event) { + int s = styleChoice[styleList.getSelectedIndex()]; + styleText.setText(fontStyle[s]); + styleText.selectAll(); + Font exampleFont2 = new Font(fontText.getText(), styleChoice[styleList.getSelectedIndex()], + Integer.parseInt(sizeText.getText())); + example.setFont(exampleFont2); + } + }); + sizeList.addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent event) { + sizeText.setText(String.valueOf(fontSize[sizeList.getSelectedIndex()])); + sizeText.selectAll(); + Font exampleFont3 = new Font(fontText.getText(), styleChoice[styleList.getSelectedIndex()], + Integer.parseInt(sizeText.getText())); + example.setFont(exampleFont3); + } + }); + ok.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Font okFont = new Font(fontText.getText(), styleChoice[styleList.getSelectedIndex()], + Integer.parseInt(sizeText.getText())); + jTextArea.setFont(okFont); + fontDialog.dispose(); + } + }); + + no.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + fontDialog.dispose(); + } + }); + fontColor.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Color color = JColorChooser.showDialog(frame, "选取颜色", null); + // 用户取消或关闭窗口 + if (color == null) { + return; + } + jTextArea.setForeground(color); + + } + }); + + + + //组装视图 + //创建各个面板 + JPanel examplePanel = new JPanel(); + examplePanel.setBorder(BorderFactory.createTitledBorder("示例")); + examplePanel.add(example); + JPanel panel1 = new JPanel(); + JPanel panel2 = new JPanel(); + JPanel panel3 = new JPanel(); + JPanel panel4 = new JPanel(); + //组装面板 + panel1.add(fonts); + panel1.add(style); + panel1.add(size); + panel2.add(fontText); + panel2.add(styleText); + panel2.add(sizeText); + panel3.add(new JScrollPane(fontList));// JList不支持直接滚动,所以要让JList作为JScrollPane的视口视图 + panel3.add(new JScrollPane(styleList)); + panel3.add(new JScrollPane(sizeList)); + panel4.add(fontColor); + panel4.add(ok); + panel4.add(no); + //将面板放入容器中 + container.add(panel1); + container.add(panel2); + container.add(panel3); + container.add(examplePanel); + container.add(panel4); + + fontDialog.setContentPane(container); + fontDialog.setSize(360, 450); + fontDialog.setLocation(1020, 530); + fontDialog.setVisible(true); + + } +} + diff --git a/src/NoteBook/FrameDemo.java b/src/NoteBook/FrameDemo.java new file mode 100644 index 0000000000000000000000000000000000000000..560c946c9b483cf846f3f4bfc1147c890ebb83c0 --- /dev/null +++ b/src/NoteBook/FrameDemo.java @@ -0,0 +1,691 @@ +package NoteBook; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.BadLocationException; +import javax.swing.undo.UndoManager; +import java.awt.*; +import java.awt.event.*; + +public class FrameDemo extends JFrame{ + private static final long serialVersionUID = 1L; + int flagFile=0; + public void init() { + //创建各种组件 + //创建窗口 + JFrame frame = new JFrame("记事本"); + + //创建文本域并设置字体 + JTextArea ta = new JTextArea(); + ta.setFont(new Font("Microsoft YuHei UI", Font.PLAIN,28 )); + + //创建滚动窗格 + JScrollPane sc = new JScrollPane(ta); + sc.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); + sc.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + sc.setViewportView(ta); + + //创建菜单条 + JMenuBar menuBar = new JMenuBar(); + + //创建面板放入状态栏标签 + JLabel sLine=new JLabel(" "); + sLine.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JPanel p=new JPanel(new FlowLayout(FlowLayout.RIGHT));//改变布局,将其放在右侧 + sLine.setHorizontalAlignment(sLine.RIGHT); + p.add(sLine,RIGHT_ALIGNMENT); + + //创建菜单组件并设置字体大小 + JMenu fileMenu = new JMenu("文件(F)"); + fileMenu.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 18)); + JMenu editMenu = new JMenu("编辑(E)"); + editMenu.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 18)); + JMenu formatMenu = new JMenu("格式(O)"); + formatMenu.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 18)); + JMenu checkMenu = new JMenu("查看(V)"); + checkMenu.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 18)); + JMenu helpMenu = new JMenu("帮助(H)"); + helpMenu.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 18)); + JMenu zoomMenu = new JMenu(" 缩放"); + zoomMenu.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + + //设置菜单组件快捷键(ALT+...) + fileMenu.setMnemonic('F'); + editMenu.setMnemonic('E'); + formatMenu.setMnemonic('O'); + checkMenu.setMnemonic('V'); + helpMenu.setMnemonic('H'); + + //创建菜单项并设置字体大小 + //"文件" + JMenuItem newSet = new JMenuItem(" 新建(N) "); + newSet.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem open = new JMenuItem(" 打开(O)…"); + open.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem save = new JMenuItem(" 保存(S) "); + save.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem saveAs = new JMenuItem(" 另存为(A)…"); + saveAs.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem exit = new JMenuItem(" 退出(X)"); + exit.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + //"编辑" + JMenuItem undo = new JMenuItem(" 撤销 "); + undo.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem redo = new JMenuItem(" 恢复 "); + redo.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem cut = new JMenuItem(" 剪切(T) "); + cut.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem copy = new JMenuItem(" 复制(C) "); + copy.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem paste = new JMenuItem(" 粘贴(P) "); + paste.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem delete = new JMenuItem(" 删除(L) "); + delete.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem check = new JMenuItem(" 查找(F)… "); + check.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem replace = new JMenuItem(" 替换(R)… "); + replace.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem goTo = new JMenuItem(" 转到(G)… "); + goTo.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem allChoose = new JMenuItem(" 全选(A) "); + allChoose.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem timeAndDate = new JMenuItem(" 时间/日期(D) "); + timeAndDate.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + //“格式” + JCheckBoxMenuItem auto = new JCheckBoxMenuItem(" 自动换行(W)",false); + auto.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JCheckBoxMenuItem transform=new JCheckBoxMenuItem("大小写转换",false); + transform.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem font = new JMenuItem(" 字体(F)…"); + font.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem backgroundColor=new JMenuItem("背景颜色"); + backgroundColor.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + //查看 + JCheckBoxMenuItem stateLine = new JCheckBoxMenuItem(" 状态栏",true); + stateLine.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + + JMenuItem large = new JMenuItem(" 放大 Ctrl+加号"); + large.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem small = new JMenuItem(" 缩小 Ctrl+减号"); + small.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem restore = new JMenuItem(" 还原默认大小"); + restore.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + //帮助 + JMenuItem checkHelp = new JMenuItem(" 查看帮助(H)"); + checkHelp.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem about = new JMenuItem(" 关于记事本(A)"); + about.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem more = new JMenuItem(" 更多功能..."); + more.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + + //弹出菜单 + JMenuItem p_undo = new JMenuItem("撤销(U) "); + p_undo.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem p_redo = new JMenuItem("恢复(R) "); + p_redo.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem p_cut = new JMenuItem("剪切(T) "); + p_cut.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem p_copy = new JMenuItem("复制(C) "); + p_copy.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem p_paste = new JMenuItem("粘帖(P) "); + p_paste.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem p_delete = new JMenuItem("删除(D) "); + p_delete.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + JMenuItem p_allChoose = new JMenuItem("全选(A) "); + p_allChoose.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16)); + + + //设置各子菜单的快捷键 + newSet.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); + open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); + save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); + + undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK)); + redo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,InputEvent.CTRL_MASK)); + cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); + copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); + paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK)); + delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,InputEvent.CTRL_MASK)); + check.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); + replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK)); + goTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,InputEvent.CTRL_MASK)); + allChoose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); + timeAndDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,InputEvent.CTRL_MASK)); + + + //创建点右键点击弹出菜单 + JPopupMenu popupMenu = new JPopupMenu(); + + popupMenu.add(p_undo); + popupMenu.add(p_redo); + popupMenu.addSeparator(); + popupMenu.add(p_cut); + popupMenu.add(p_copy); + popupMenu.add(p_paste); + popupMenu.add(p_delete); + popupMenu.addSeparator(); + popupMenu.add(p_allChoose); + + //给ta注册鼠标事件,监听用户释放鼠标的动作,展示菜单 + ta.add(popupMenu); + ta.addMouseListener(new MouseAdapter() { + //@Override + public void mousePressed(MouseEvent e) { + boolean flag = e.isPopupTrigger(); + if (flag) { + //显示PopupMenu + popupMenu.show(e.getComponent(), e.getX(), e.getY()); + + } + + ta.requestFocus(); + } + + @Override + public void mouseReleased(MouseEvent e) { + boolean flag = e.isPopupTrigger(); + if (flag) { + //显示PopupMenu + popupMenu.show(e.getComponent(), e.getX(), e.getY()); + + } + + ta.requestFocus(); + } + }); + + + //组建视图 + //文件 + fileMenu.add(newSet); + fileMenu.addSeparator(); + fileMenu.add(open); + fileMenu.add(save); + fileMenu.add(saveAs); + fileMenu.addSeparator(); + fileMenu.add(exit); + //编辑 + editMenu.add(undo); + editMenu.add(redo); + editMenu.addSeparator(); + editMenu.add(cut); + editMenu.add(copy); + editMenu.add(paste); + editMenu.add(delete); + editMenu.addSeparator(); + editMenu.add(check); + editMenu.add(replace); + editMenu.add(goTo); + editMenu.addSeparator(); + editMenu.add(allChoose); + editMenu.add(timeAndDate); + //格式 + formatMenu.add(auto); + formatMenu.add(transform); + formatMenu.add(font); + formatMenu.addSeparator(); + formatMenu.add(backgroundColor); + //查看 + checkMenu.add(zoomMenu); + checkMenu.add(stateLine); + //帮助 + helpMenu.add(checkHelp); + helpMenu.addSeparator(); + helpMenu.add(about); + helpMenu.add(more); + //zoomMenu + zoomMenu.add(large); + zoomMenu.add(small); + zoomMenu.add(restore); + + //状态栏标签 + frame.add(p,BorderLayout.SOUTH); + + //组装菜单条 + menuBar.add(fileMenu); + menuBar.add(editMenu); + menuBar.add(formatMenu); + menuBar.add(checkMenu); + menuBar.add(helpMenu); + + //设置窗口的大小并添加到窗口 + frame.setSize(800, 600); + frame.setLocation(850, 450); + frame.setJMenuBar(menuBar); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.add(sc,BorderLayout.CENTER); + frame.setVisible(true); + + + + + //功能的实现(注册监听器) + //观察文本区内容改变的监听器 + ta.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void removeUpdate(DocumentEvent e) { + flagFile=1; + } + @Override + public void insertUpdate(DocumentEvent e) { + flagFile=1; + } + @Override + public void changedUpdate(DocumentEvent e) { + } + }); + + + //新建文件的监听器 + newSet.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + FileFunction f=new FileFunction(); + if(flagFile==1){ + JLabel label=new JLabel("是否保存修改?"); + label.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + int res=JOptionPane.showConfirmDialog(frame,label,"记事本-保存", + JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE); + if(res==JOptionPane.OK_OPTION){ + f.saveAsFile(frame,ta); + }else if(res == JOptionPane.NO_OPTION){ + ta.setText(""); + } + flagFile=0; + + }else { + ta.setText(""); + frame.setTitle("新建记事本"); + } + + } + }); + + //打开文件的监听器 + open.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + FileFunction f=new FileFunction(); + f.openFile(frame, ta); + } + }); + //保存文件的监听器 + save.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + FileFunction f=new FileFunction(); + if(flagFile==1){ + JLabel label=new JLabel("是否保存修改?"); + label.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + int res=JOptionPane.showConfirmDialog(frame,label,"记事本-保存", + JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE); + if(res==JOptionPane.OK_OPTION){ + f.saveFile(frame, ta); + flagFile=0; + }else if(res==JOptionPane.NO_OPTION){ + flagFile=0; + }else if(res==JOptionPane.CANCEL_OPTION){ + return; + } + } else if(flagFile==0){ + f.saveFile(frame, ta); + }flagFile=0; + } + }); + //另存为的监听器 + saveAs.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + new FileFunction().saveAsFile(frame,ta); + flagFile=0; + + } + }); + //退出的监听器 + exit.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JLabel ensure=new JLabel("确定要退出吗?"); + ensure.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + int exitChoose=JOptionPane.showConfirmDialog(frame, ensure, "退出提示", JOptionPane.OK_CANCEL_OPTION); + if(exitChoose==JOptionPane.OK_OPTION){ + System.exit(0); + }else{ + return; + } + } + }); + + //撤销和恢复的监听器 + UndoManager undoManager=new UndoManager(); + ta.getDocument().addUndoableEditListener(undoManager); + + undo.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(undoManager.canUndo()) { + undoManager.undo(); + } + } + }); + redo.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(undoManager.canRedo()){ + undoManager.redo(); + } + } + }); + p_undo.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(undoManager.canUndo()) { + undoManager.undo(); + } + } + }); + p_redo.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(undoManager.canRedo()){ + undoManager.redo(); + } + } + }); + //剪切的监听器 + cut.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.cut(); + } + }); + p_cut.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.cut(); + } + }); + //复制的监听器 + copy.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.copy(); + } + }); + p_copy.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.copy(); + } + }); + //粘贴的监听器 + paste.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.paste(); + } + }); + p_paste.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.paste(); + } + }); + //删除的监听器 + delete.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.replaceSelection(null); + } + }); + p_delete.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.replaceSelection(null); + } + }); + //查找的监听器 + check.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + new SearchFunction(frame,ta); + } + }); + //替换的监听器 + replace.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + new ReplaceFunction(frame,ta); + } + }); + //转到的监听器 + goTo.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + new JumpFunction().jump(frame, ta); + } + }); + //全选的监听器 + allChoose.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.selectAll(); + } + }); + p_allChoose.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.selectAll(); + } + }); + //日期时间的监听器 + timeAndDate.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + new TimeFunction().time(); + } + }); + + + //缩放功能的监听器 + Font currentFont=ta.getFont(); + large.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Font currentFont=ta.getFont(); + ta.setFont(new Font(currentFont.getFamily(),currentFont.getStyle(),currentFont.getSize()+2)); + } + }); + small.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Font currentFont=ta.getFont(); + ta.setFont(new Font(currentFont.getFamily(),currentFont.getStyle(),currentFont.getSize()-2)); + } + }); + //还原大小的监听器 + restore.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ta.setFont(new Font("Microsoft YuHei UI", Font.PLAIN,28 )); + } + }); + //状态栏行列 + ta.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + int row=0,col=0; + int position=ta.getCaretPosition(); + //获取所在行列 + try { + row=ta.getLineOfOffset(position)+1; + col=position-ta.getLineStartOffset(row-1); + } catch (BadLocationException ex) { + + } + sLine.setText("第" +row+"行," +"第"+col+"列 " ); + + } + @Override + public void keyReleased(KeyEvent e) { + int row=0,col=0; + int position=ta.getCaretPosition(); + //获取所在行列 + try { + row=ta.getLineOfOffset(position)+1; + col=position-ta.getLineStartOffset(row-1); + } catch (BadLocationException ex) { + + } + sLine.setText("第" +row+"行," +"第"+col+"列 " ); + + } + }); + //状态栏的监听器 + stateLine.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(stateLine.isSelected()){ + sLine.setVisible(true); + }else{ + sLine.setVisible(false); + } + } + }); + + //自动换行的监听器 + auto.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(auto.isSelected()){ + ta.setLineWrap(true); + }else{ + ta.setLineWrap(false); + } + } + }); + //大小写转换的监听器 + transform.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if(transform.isSelected()){ + String str=ta.getText(); + char[] series=str.toCharArray(); + int length=series.length; + for (int i = 0; i < length; i++) { + char a=series[i]; + if(Character.isLowerCase(a)){ + series[i]=Character.toUpperCase(a); + }else if(Character.isUpperCase(a)){ + series[i]=Character.toLowerCase(a); + } + } + + String newStr=new String(series); + ta.setText(newStr); + + } + } + }); + //设置字体的监听器 + font.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + new FontSetFunction().fontSet(frame, ta); + } + }); + + //设置背景颜色的监听器 + backgroundColor.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Color color = JColorChooser.showDialog(frame, "更换背景颜色", null); + if (color == null) { + return; + } + ta.setBackground(color); + } + }); + + //查看帮助的监听器 + checkHelp.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFrame frame=new JFrame("帮助"); + JLabel label1=new JLabel("根据自身需求点击相应菜单栏即可," + + "实在操作不懂可自行百度."); + label1.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JOptionPane.showMessageDialog(frame,label1,"帮助",JOptionPane.INFORMATION_MESSAGE); + } + }); + //关于记事本的监听器 + about.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFrame frame = new JFrame("关于记事本"); + JLabel label = new JLabel("吴代镇的JAVA课程设计性实验(记事本),希望您体验愉悦!"); + label.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JOptionPane.showMessageDialog(frame, label, "关于记事本",JOptionPane.INFORMATION_MESSAGE); + + } + }); + //“更多功能”的监听器 + more.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFrame frame = new JFrame("更多功能"); + JLabel label = new JLabel("敬请期待..."); + label.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JOptionPane.showMessageDialog(frame, label, "更多功能",JOptionPane.INFORMATION_MESSAGE); + } + }); + + + //缩放功能的实现(快捷) + MouseWheelListener sysWheel = sc.getMouseWheelListeners()[0];//得到系统滚动事件 + sc.removeMouseWheelListener(sysWheel);//默认移除系统滚动,需要时添加 + class event extends MouseAdapter{ + @Override + public void mouseWheelMoved(MouseWheelEvent e){ + if(e.isControlDown()){//当ctrl键被按下,滚动为放大缩小 + Font font = ta.getFont(); + if(e.getWheelRotation()<0){//滚动条向前就放大文本 + ta.setFont(new Font(font.getFamily(),font.getStyle(),font.getSize()+1)); + }else if(e.getWheelRotation()>0){//滚动条向后就缩小文本 + ta.setFont(new Font(font.getFamily(),font.getStyle(),font.getSize()-1)); + } + }else{//当ctrl没有被按下,则为系统滚动 + sc.addMouseWheelListener(sysWheel); + sysWheel.mouseWheelMoved(e);//触发系统滚动事件。 + sc.removeMouseWheelListener(sysWheel); + } + } + } + sc.addMouseWheelListener(new event()); + + //关闭窗口的监听器 + frame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + FileFunction f=new FileFunction(); + if(flagFile==1){ + JLabel label=new JLabel("是否将更改保存到新建记事本?"); + label.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + int res=JOptionPane.showConfirmDialog(frame, label, "记事本", + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + if(res==JOptionPane.OK_OPTION){ + f.saveAsFile(frame, ta); + flagFile=0; + }else if(res==JOptionPane.NO_OPTION){ + System.exit(0); + } + } + } + }); + + } + +} diff --git a/src/NoteBook/JumpFunction.java b/src/NoteBook/JumpFunction.java new file mode 100644 index 0000000000000000000000000000000000000000..f0c4b996eb0a006191a403982a65601f3cd0023a --- /dev/null +++ b/src/NoteBook/JumpFunction.java @@ -0,0 +1,68 @@ +package NoteBook; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class JumpFunction { + public void jump(JFrame frame,JTextArea textArea) { + //创建对话框(转到行数对话框) + JDialog dialog = new JDialog(frame, "转到指定行"); + Container container = dialog.getContentPane(); + JButton come = new JButton("转到"); + JButton cancel = new JButton("取消"); + JLabel label = new JLabel("请输入行号:"); + dialog.setLayout(null); + JTextField tf = new JTextField(); + + //设置各组件的大小 + label.setBounds(10, 12, 400, 30); + tf.setBounds(10, 42, 350, 28); + come.setBounds(180, 84, 80, 28); + come.setContentAreaFilled(false); + cancel.setBounds(270, 84, 80, 28); + cancel.setContentAreaFilled(false); + dialog.setBounds(200, 200, 400, 160); + dialog.setResizable(false); + //组建视图 + container.add(label); + container.add(tf); + container.add(come); + container.add(cancel); + + dialog.setLocation(1060, 660); + dialog.setVisible(true); + + come.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + // 确定行数 + int r = textArea.getLineCount(); + String str[] = textArea.getText().split("\n"); + int count = 0; + try { + count = Integer.parseInt(tf.getText().trim()); + } catch (Exception e2) { + JOptionPane.showMessageDialog(null, "请输入数字!"); + } + if (r >= count) { + int sum = 0; + for (int i = 0; i < count - 1; i++) { + sum += str[i].length() + 1; + } + textArea.setCaretPosition(sum); + } else { + JOptionPane.showMessageDialog(null, "行数超过了总行数!"); + } + } + }); + + + cancel.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent e) { + dialog.dispose(); + } + }); + } + } \ No newline at end of file diff --git a/src/NoteBook/ReplaceFunction.java b/src/NoteBook/ReplaceFunction.java new file mode 100644 index 0000000000000000000000000000000000000000..c1841aafb08118c21bc85c1fde83289c187920b4 --- /dev/null +++ b/src/NoteBook/ReplaceFunction.java @@ -0,0 +1,219 @@ +package NoteBook; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ReplaceFunction { + public ReplaceFunction(JFrame frame, JTextArea jtextArea){ + JDialog replaceDialog = new JDialog(frame, "替换", false); + // 返回此对话框的contentPane对象 + Container container = replaceDialog.getContentPane(); + container.setLayout(new FlowLayout(FlowLayout.LEFT)); + + //创建标签和文本框并设置大小 + JLabel findContent=new JLabel("查找内容:"); + findContent.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JTextField TFindContent=new JTextField(20); + TFindContent.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JLabel replaceTo=new JLabel("替换为: "); + replaceTo.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JTextField TReplaceTo=new JTextField(20); + TReplaceTo.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JLabel count=new JLabel("找到0个"); + count.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + + //创建按钮 + JButton findNext=new JButton("查找下一个"); + findNext.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13)); + JButton replace=new JButton("替换(R)"); + replace.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13)); + JButton allReplace=new JButton("全部替换"); + allReplace.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13)); + JButton cancel=new JButton("取消"); + cancel.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13)); + + //创建复选框 + JCheckBox box=new JCheckBox("区分大小写"); + box.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JRadioButton upReplace=new JRadioButton("向上替换"); + upReplace.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + upReplace.setSelected(true);//默认第一个选中 + JRadioButton downReplace=new JRadioButton("向下替换"); + downReplace.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + ButtonGroup group=new ButtonGroup(); + group.add(upReplace); + group.add(downReplace); + + //设置位置和大小 + findContent.setBounds(20,20,93,22); + findNext.setBounds(20,45,93,22); + count.setBounds(20, 55, 80, 85); + TFindContent.setBounds(100,20,200,22); + TReplaceTo.setBounds(100,28,200,22); + findNext.setBounds(320, 18, 105, 32); + replace.setBounds(320, 55, 105, 32); + allReplace.setBounds(320, 92, 105, 32); + cancel.setBounds(320, 128, 105, 32); + + box.setBounds(15, 120, 100, 55); + upReplace.setBounds(130, 120, 80, 55); + downReplace.setBounds(230, 120, 80, 55); + + //组建视图(创建对话框) + JPanel pan=new JPanel(); + pan.setBorder(BorderFactory.createTitledBorder("方向")); + pan.add(upReplace); + pan.add(downReplace); + + JPanel panel1=new JPanel(); + JPanel panel2=new JPanel(); + JPanel panel3=new JPanel(); + JPanel panel4=new JPanel(); + JPanel panel5=new JPanel(); + + panel4.setLayout(new GridLayout(2, 1)); + panel1.add(findContent); + panel1.add(TFindContent); + panel1.add(findNext); + + panel2.add(replaceTo); + panel2.add(TReplaceTo); + + panel3.add(box); + panel3.add(pan); + panel3.add(cancel); + + panel4.add(replace); + panel4.add(allReplace); + panel2.add(panel4); + + panel5.add(count); + + container.add(panel1); + container.add(panel2); + container.add(panel5); + container.add(panel3); + + replaceDialog.setSize(540, 250); + replaceDialog.setLocation(1000, 600); + replaceDialog.setVisible(true); + replaceDialog.setResizable(true); + replaceDialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + + //取消的监听器 + cancel.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + replaceDialog.setVisible(false); + } + }); + + //查找下一个的监听器 + JLabel failReplace=new JLabel("找不到您要替换的内容"); + failReplace.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + findNext.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String str1,str2,str3,str4,strA,strB; + int a , b=0; + int found=0; + int FindStartPos = jtextArea.getCaretPosition();//获得光标位置 + str1= jtextArea.getText(); + str2= TFindContent.getText(); + str3=str1.toLowerCase(); + str4=str2.toLowerCase(); + + //区分大小写是否被选中 + if(box.isSelected()){//需要区分大小写 + strA=str1; + strB=str2; + }else{//未选中"区分大小写",则全部小写 + strA=str3; + strB=str4; + } + + //查找下一个 + if (upReplace.isSelected()) { + if(jtextArea.getSelectedText()==null){ + a = strA.lastIndexOf(strB, FindStartPos - 1); + }else{ + a = strA.lastIndexOf(strB, FindStartPos - str2.length() - 1); + } + if(a>-1){ + jtextArea.setCaretPosition(a); + b=str2.length(); + jtextArea.select(a, a+b); + + }else{ + JOptionPane.showMessageDialog(null, failReplace, + "替换", JOptionPane.INFORMATION_MESSAGE); + } + } else if (downReplace.isSelected()) { + if(jtextArea.getSelectedText()==null){ + a = strA.indexOf(strB, FindStartPos +1); + }else{ + a = strA.indexOf(strB, FindStartPos - str2.length() +1); + } + if(a>-1){ + jtextArea.setCaretPosition(a); + b=str2.length(); + jtextArea.select(a, a+b); + }else { + JOptionPane.showMessageDialog(null, failReplace, + "替换", JOptionPane.INFORMATION_MESSAGE); + } + } + + //找到'几'个 + Pattern p= Pattern.compile(str2); + Matcher m=p.matcher(str1); + while(m.find()) { + found++; + } + count.setText("找到"+found+"个"); + + + } + }); + + //设置替换按钮的监听器 + replace.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(TReplaceTo.getText().length()==0 && jtextArea.getSelectedText()!=null){ + jtextArea.replaceSelection(""); + JOptionPane.showMessageDialog(replaceDialog, "请输入替换的内容!", "提示", JOptionPane.WARNING_MESSAGE); + }else if(TReplaceTo.getText().length()>0 && jtextArea.getSelectedText()!=null){ + jtextArea.replaceSelection(TReplaceTo.getText()); + } + } + }); + + //设置全部替换按钮的监听器 + allReplace.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + //显示查找到的数量 + int found=0; + String str1=TFindContent.getText(); + String str2=jtextArea.getText(); + String str3=TReplaceTo.getText(); + Pattern p=Pattern.compile(str1); + Matcher m=p.matcher(str2); + while(m.find()) { + found++; + } + count.setText("替换"+found+"个"); + //替换所有找到的内容 + str2=str2.replace(str1, str3); + jtextArea.setText(str2); + + } + }); + + } +} diff --git a/src/NoteBook/SearchFunction.java b/src/NoteBook/SearchFunction.java new file mode 100644 index 0000000000000000000000000000000000000000..0a423535a469531ef2cb9d27e8e3e2003c538f9f --- /dev/null +++ b/src/NoteBook/SearchFunction.java @@ -0,0 +1,160 @@ +package NoteBook; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class SearchFunction { + public SearchFunction(JFrame frame, JTextArea jTextArea){ + + //创建新的弹窗(查找对话框) + JDialog dialog=new JDialog(frame, "查找", false); + dialog.setSize(500, 210); + dialog.setLocationRelativeTo(null); + dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + //创建容器 + Container container=dialog.getContentPane(); + //创建相关组件 + JLabel findContent = new JLabel("查找内容(N):"); + findContent.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JLabel count=new JLabel("找到0个"); + count.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JTextField tf = new JTextField(15); + tf.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JButton findNext = new JButton("查找下一个(F):"); + findNext.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13)); + JButton cancel = new JButton("取消"); + cancel.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13)); + JCheckBox box = new JCheckBox("区分大小写(C)"); + box.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + + //创建多斥按钮组 + ButtonGroup bGroup = new ButtonGroup(); + JRadioButton up = new JRadioButton("向上查找(U)"); + up.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + JRadioButton down = new JRadioButton("向下查找(D)"); + down.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + //创建面板 + JPanel panel1=new JPanel(); + JPanel panel2=new JPanel(); + JPanel panel3 = new JPanel(); + JPanel Panel4 = new JPanel(); + Panel4.setBorder(BorderFactory.createTitledBorder("方向")); + JPanel panel5=new JPanel(); + //默认选中"向上查找" + up.setSelected(true); + + //组装"查找"对话框视图 + container.setLayout(new FlowLayout(FlowLayout.LEFT)); + bGroup.add(up); + bGroup.add(down); + panel1.setLayout(new GridLayout(2, 1)); + panel1.add(findNext); + panel1.add(cancel); + panel2.add(findContent); + panel2.add(tf); + panel2.add(panel1); + panel5.add(count); + Panel4.add(up); + Panel4.add(down); + panel3.add(box); + panel3.add(Panel4); + container.add(panel2); + container.add(panel5); + container.add(panel3); + dialog.setContentPane(container); + + //设置大小 + dialog.setLocation(1000, 600); + dialog.setVisible(true); + + findContent.setBounds(20,20,93,22); + tf.setBounds(100,20,200,22); + count.setBounds(20, 55, 80, 35); + findNext.setBounds(320, 18, 80, 32); + cancel.setBounds(320, 53, 80, 32); + box.setBounds(15, 90, 100, 25); + up.setBounds(130, 90, 80, 25); + down.setBounds(230, 90, 80, 25); + + //取消的监听 + cancel.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + dialog.dispose(); + } + }); + + + //查找下一个的监听 + JLabel failFind=new JLabel("找不到您要查找的内容"); + failFind.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16)); + findNext.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String str1,str2,str3,str4,strA,strB; + int a , b=0; + int found=0; + int FindStartPos = jTextArea.getCaretPosition();//获得光标位置 + str1= jTextArea.getText(); + str2= tf.getText(); + str3=str1.toLowerCase(); + str4=str2.toLowerCase(); + + //区分大小写是否被选中 + if(box.isSelected()){//需要区分大小写 + strA=str1; + strB=str2; + }else{//未选中"区分大小写",则全部小写 + strA=str3; + strB=str4; + } + + //查找下一个 + if (up.isSelected()) { + if(jTextArea.getSelectedText()==null){ + a = strA.lastIndexOf(strB, FindStartPos - 1); + }else{ + a = strA.lastIndexOf(strB, FindStartPos - str2.length() - 1); + } + if(a>-1){ + jTextArea.setCaretPosition(a); + b=str2.length(); + jTextArea.select(a, a+b); + + }else{ + JOptionPane.showMessageDialog(null, failFind, + "查找", JOptionPane.INFORMATION_MESSAGE); + } + } else if (down.isSelected()) { + if(jTextArea.getSelectedText()==null){ + a = strA.indexOf(strB, FindStartPos +1); + }else{ + a = strA.indexOf(strB, FindStartPos - str2.length() +1); + } + if(a>-1){ + jTextArea.setCaretPosition(a); + b=str2.length(); + jTextArea.select(a, a+b); + } + }else { + JOptionPane.showMessageDialog(null, failFind, + "查找", JOptionPane.INFORMATION_MESSAGE); + } + + //找到'几'个 + Pattern p= Pattern.compile(str2); + Matcher m=p.matcher(str1); + while(m.find()) { + found++; + } + count.setText("找到"+found+"个"); + + + } + }); + } +} diff --git a/src/NoteBook/TimeFunction.java b/src/NoteBook/TimeFunction.java new file mode 100644 index 0000000000000000000000000000000000000000..57455577fb9c0a1ec5bace544246bde4560a9d50 --- /dev/null +++ b/src/NoteBook/TimeFunction.java @@ -0,0 +1,17 @@ +package NoteBook; + +import javax.swing.*; +import java.awt.*; +import java.text.SimpleDateFormat; + +public class TimeFunction { + public void time() { + SimpleDateFormat ex = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String str=ex.format(System.currentTimeMillis()); + JLabel time=new JLabel("当前时间为:"+str); + time.setFont(new Font("Microsoft YaHei UI",Font.PLAIN,16));; + JOptionPane.showMessageDialog(null, time, + "Date and Time", JOptionPane.INFORMATION_MESSAGE); + + } +} \ No newline at end of file diff --git a/src/NoteBook/noteBookTest.java b/src/NoteBook/noteBookTest.java new file mode 100644 index 0000000000000000000000000000000000000000..611c0097cbccd3409af213e698e1d37a3bbb4401 --- /dev/null +++ b/src/NoteBook/noteBookTest.java @@ -0,0 +1,8 @@ +package NoteBook; + +public class noteBookTest { + public static void main(String[] args) { + new FrameDemo().init(); + } + +}