如何用java写一个简单的记事本。
来源:互联网 发布:中央财经大学知乎 编辑:程序博客网 时间:2024/06/11 03:51
package MSCnotepad;import java.awt.*; //这里主要是使用基础图形和 eventqueueimport java.awt.event.*;import java.util.*;import java.io.*; //文件流。(这里使用字符流,以及异常)import javax.swing.*; //非基础类 绘图和交互等。 swing 比awt 强大很多倍。import javax.swing.filechooser.*; // 文件选择器import javax.swing.filechooser.FileFilter; //里面有一个可以判断是否应该接受一个文件import java.text.SimpleDateFormat; //加入 我们的 日期服务/** * Created by 窦志扬 on 2016/10/31. * * */public class openone { public static void main(String[] args){ EventQueue.invokeLater(new Runnable() { //与线程相关。事件列表 @Override public void run() { Frame frame = new Frame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //基础的一些构造 frame frame.setVisible(false); } }); }}// 可以有多个类。 class Frame extends JFrame { public Frame() { JMenuBar menus = new JMenuBar(); // 关于菜单 :jmenuitem 加到➡️ jmenu ➡️ jmenubar 一个比较大的可以放菜单的区域 //也有例外 JMenu Fileone = new JMenu("文件"); // 放入菜单的选项 Fileone.setFont(new Font("TimesRoman",Font.BOLD,15)); JMenu Operation = new JMenu("文本"); Operation.setFont(new Font("TimesRoman",Font.BOLD,15)); //font 设置字体。推荐一个好看的字体:timesroman。更好的视觉体验 JMenu Windows = new JMenu("视窗"); Windows.setFont(new Font("TimesRoman",Font.BOLD,15)); JMenu Serve = new JMenu("辅助"); Serve.setFont(new Font("TimesRoman",Font.BOLD,15)); JMenu Help = new JMenu("帮助"); Help.setFont(new Font("TimesRoman",Font.BOLD,15)); menus.add(Fileone); //大的菜单区域里加入 menus.add(Operation); menus.add(Windows); menus.add(Serve); menus.add(Help); // ***************************************快捷键 JMenuItem open = new JMenuItem("打开"); open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); // -- mac设置快捷键的方法 :Toolkit ("工具包") 超级强大~ 可以实现 ctrl 到command 的转换 // 其实 在GUI中 可以用他来 获取屏幕的尺寸 JMenuItem saveother = new JMenuItem("另存为"); saveother.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, //vk-n n就是快捷键 Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); JMenuItem save = new JMenuItem("保存"); save .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); JMenuItem Rename = new JMenuItem("重命名"); Rename.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); JMenuItem more = new JMenuItem("更多"); //还想加入属性 比如字节数等等。 JMenuItem Delete = new JMenuItem("清空当前"); Delete .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); JMenu TEXT = new JMenu("文本权限"); JMenu works = new JMenu("文本信息"); ButtonGroup groupone = new ButtonGroup(); JRadioButtonMenuItem readonly = new JRadioButtonMenuItem("只读操作"); //radiobutton 在这个组里只可以选一个 JRadioButtonMenuItem operation = new JRadioButtonMenuItem("读写操作"); //记得放到组里 (注意只是逻辑上~ 作为一组) operation.setSelected(true); //默认选择项 groupone.add(operation); groupone.add(readonly); JMenuItem NUMBER = new JMenuItem("查看字数"); JMenuItem LINES = new JMenuItem("查看行数"); JMenuItem color = new JMenuItem("显示背景"); // 主要是显示操作 color .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); JMenuItem leftone = new JMenuItem("左半屏"); leftone .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); JMenuItem rightone = new JMenuItem("右半屏"); rightone .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); JMenuItem max = new JMenuItem("最大化"); max .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); JMenuItem min = new JMenuItem("最小化"); min .setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); JMenuItem BACK = new JMenuItem("最初界面"); JMenuItem dateadd = new JMenuItem("添加日期"); //特殊服务 JMenuItem More = new JMenuItem("关于我们"); // 关于我们 Fileone.add(open); Fileone.addSeparator(); Fileone.add(saveother); Fileone.addSeparator(); Fileone.add(save); Fileone.addSeparator(); Fileone.add(Rename); Fileone.addSeparator(); Fileone.add(more); Operation.add(Delete); Operation.add(TEXT); Operation.add(works ); works.add(LINES ); works.add(NUMBER); TEXT.add(readonly); // 在面板的加入的时候是加入具体的 选项 TEXT.add(operation); Windows.add(color); Windows.add(leftone); Windows.add(rightone); Windows.add(max); Windows.add(min); Windows.add(BACK); Serve.add(dateadd); Help.add(More); JPanel panel1 = new JPanel(); // jpanel ➡️ jframe textArea1 = new JTextArea(null, 8, 40); //textarea实现多行文本 textfield 单行 textArea1.setLineWrap(true); //准许换行 textArea1.setSelectedTextColor(new Color(238,121,66)); // 设置文本被选择后的颜色( 可以多去api查方法 类 ) textArea1.setSelectionColor(new Color(238,238,209)); //设置背景色 textArea1.setText(""); textArea1.setBackground(new Color(245, 255, 250)); textArea1.setFont(new Font("TimesRoman",Font.BOLD,20));// JScrollPane a = new JScrollPane(textArea1); //这个方法可以显示滚轮但是咱们先不用 也可以加上 JFrame frame = new JFrame("MSCnotrpad 1.01"); Dimension SCREEN = Toolkit.getDefaultToolkit().getScreenSize(); int WIDTH = (int) SCREEN.getWidth(); int HEIGHT = (int) SCREEN.getHeight(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocation(WIDTH / 4, HEIGHT / 4); frame.setSize(600, 400); frame.setJMenuBar(menus); //向frame加入菜单栏 frame.getContentPane().add(panel1); frame.getContentPane().add(textArea1, BorderLayout.CENTER); frame.setResizable(true); //允许用户自己拖拉frame frame.setVisible(true); //****************************************右键监听 *****************************************// JPopupMenu popupone = new JPopupMenu();// JMenuItem pop1= new JMenuItem("关闭窗口");// JMenuItem pop2 = new JMenuItem("最小化窗口");// JMenuItem pop3 = new JMenuItem("最大化窗口");// JMenuItem CLOSER = new JMenuItem("关闭菜单栏");// popupone.add(pop1);// popupone.add(pop2);// popupone.add(pop3);// popupone.add(CLOSER);// JPanel tanchu = new JPanel();// popupone.show(tanchu,WIDTH/4,HEIGHT/4);//// textArea1.addMouseListener(new MouseAdapter() {//// });// textArea1.setComponentPopupMenu(popupone);// menus.setComponentPopupMenu(popupone);//**********************************下面给按钮安装监听器~*****************************************// *********************************************************************************************// *********************************************************************************************//**********************************文件对话框 打开部分 设置它的文件对话框*************************** open.addActionListener(new FileOpenListener()); chooser = new JFileChooser(); //创建一个事件监听器 FileNameExtensionFilter filter = new FileNameExtensionFilter("文本文件", "txt");//设置filechooser。文件过滤器只选择txt类 chooser.setFileFilter(filter); chooser.setFileView(new FileIconView(filter, null));//小图标使用默认图标//******************************* 另存为 部分 设置他的文件对话框 ************************************************** saveother.addActionListener(new SaveAnotherListener()); FileNameExtensionFilter filter2 = new FileNameExtensionFilter("文本文件", "txt");//设置filechooser。文件过滤器只选择txt类 chooser.setFileFilter(filter2); chooser.setFileView(new FileIconView(filter2, null));//********************************** 单纯 保存部分 *************************************** save.addActionListener(new SaveListener()); //********************************** 重命名 *************************************** Rename.addActionListener(new Renameone()); FileNameExtensionFilter filter3 = new FileNameExtensionFilter("文本文件", "txt");//设置filechooser。文件过滤器只选择txt类 chooser.setFileFilter(filter3); chooser.setFileView(new FileIconView(filter3, null)); //********************************** 文本 清空 *************************************** Delete.addActionListener(new Clearit());//********************************************* 视窗 改变颜色 ********************************************************* color.addActionListener(new ChangeColor());//******************************************** 视窗 改变窗口************************************************************ min.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ frame.setExtendedState(JFrame.ICONIFIED); } }); max.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { frame.setExtendedState(JFrame.MAXIMIZED_BOTH); } }); //不知道为什么实现不了?哎伤心 ,自己写一个事件监听来完成 实现另一个功能// widthone.addActionListener(new ActionListener(){// @Override public void actionPerformed(ActionEvent e){// frame.setExtendedState(JFrame.MAXIMIZED_HORIZ);// }// });// heightone.addActionListener(new ActionListener(){// @Override public void actionPerformed(ActionEvent e){// frame.setExtendedState(JFrame.MAXIMIZED_VERT);// }// }); leftone.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ frame.setLocation( 0,0); frame.setSize(WIDTH/2,HEIGHT); } }); rightone.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ frame.setLocation( WIDTH/2, 0); frame.setSize(WIDTH/2,HEIGHT); } }); BACK.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.setLocation(WIDTH / 4, HEIGHT / 4); frame.setSize(600, 400); } });//**************************************** 文本 只读 ****************************************************************** readonly.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveother.setEnabled(false); save.setEnabled(false); Delete.setEnabled(false); textArea1.setLineWrap(true); } });//***************************************** 文本 读写 ******************************************************************* operation.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveother.setEnabled(true); save.setEnabled(true); Delete.setEnabled(true); } }); //***************************************** 文本 行数******************************************************************* LINES.addActionListener(new showLine()); //******************************************** 辅助 *************************************************************** dateadd.addActionListener(new addtimeone());//**************************************** 单纯 帮助 *************************************** More.addActionListener(new HelpListener()); } //************************************* 设置 单击时的响应操纵 *************************************// *********************************************************************************************// ***********************************************打开文件************************************** String name; //写在内部类外面 ,储存被选择文件的路径。 private class FileOpenListener implements ActionListener { //时间响应起器(实现接口) public void actionPerformed(ActionEvent event) { chooser.setCurrentDirectory(new File("/Users/frankdura/Desktop"));//默认的文件打开路径.否则为自己的文件夹 int result = chooser.showOpenDialog(Frame.this); //显示文件选择对话框 if (result == JFileChooser.APPROVE_OPTION) { name = chooser.getSelectedFile().getPath(); File dataFile = new File(name); System.out.print(name); try { FileReader fr = new FileReader(dataFile); //字符流 fileinputstream 字节流 (黑人问号) BufferedReader br = new BufferedReader(fr); //处理流 (缓冲一下) String content; while ((content = br.readLine()) != null) { textArea1.append(content + "\n"); } br.close(); fr.close(); } catch (FileNotFoundException e) { System.out.println("找不到文件!原因如下:" + e.getMessage()); } catch (IOException e) { e.printStackTrace(); } } } } // *********************************************************************************************// ***********************************************保存******************************************** private class SaveListener implements ActionListener { public void actionPerformed(ActionEvent event) { FileWriter fr; BufferedWriter br; try { if(name == null){ JFrame dialog2 = new JFrame(); cannotsave cannot = new cannotsave(); } fr = new FileWriter(name); br = new BufferedWriter(fr); br.write(textArea1.getText()); br.flush(); br.close(); fr.close(); } catch (FileNotFoundException e) { System.out.println("找不到文件!原因如下:"); } catch (IOException e) { e.printStackTrace(); } } } // *********************************************************************************************// ***********************************************另存为******************************************** private class SaveAnotherListener implements ActionListener { public void actionPerformed(ActionEvent event) { chooser.setCurrentDirectory(new File("/Users/frankdura/Desktop"));//默认的文件打开路径.否则为自己的文件夹 int result = chooser.showSaveDialog(Frame.this); //显示文件选择对话框 if (result == JFileChooser.APPROVE_OPTION) { String name = chooser.getSelectedFile().getPath(); File dataFile = new File(name); FileWriter fr; BufferedWriter br; try { fr = new FileWriter(name); br = new BufferedWriter(fr); br.write(textArea1.getText()); br.flush(); br.close(); fr.close(); } catch (FileNotFoundException e) { System.out.println("对不起,保存失败。原因如下:" + e.getMessage()); } catch (IOException e) { e.printStackTrace(); } } } } //********************************************************重命名~********************************* private class Renameone implements ActionListener { public void actionPerformed(ActionEvent event) { chooser.setCurrentDirectory(new File("/Users/frankdura/Desktop"));//默认的文件打开路径.否则为自己的文件夹 int result = chooser.showOpenDialog(Frame.this); //显示文件选择对话框 if (result == JFileChooser.APPROVE_OPTION) { String name = chooser.getSelectedFile().getPath(); File dataFile = chooser.getSelectedFile(); String nameone = "新的名字.txt"; dataFile.renameTo(new File(nameone)); } } } //************************************* 文本 清空 ************************************************* private class Clearit implements ActionListener{ public void actionPerformed(ActionEvent event){ textArea1.setText(null); } } //************************************* 文本 行数 ************************************************* private class showLine implements ActionListener{ public void actionPerformed(ActionEvent event){ JFrame LINE = new JFrame("行数"); line a = new line(); } } //************************************* 视窗 色彩 ************************************************** private class ChangeColor implements ActionListener { public void actionPerformed(ActionEvent event){ Color defaultColor = getBackground();//获取背景色 Color selected = JColorChooser.showDialog(Frame.this,"设置显示背景色",defaultColor); //jcolorchooser 很好用 。 if(selected != null) { textArea1.setBackground(selected); } } } //*********************************** 辅助当前时间 ******************************************** private class addtimeone implements ActionListener { public void actionPerformed(ActionEvent event) { Date now = new Date(); //获取当前时间 SimpleDateFormat timenow = new SimpleDateFormat("yyyy年 MM月 dd日 \n");//格式化当前日期时间 还要换行啊 String shijian = timenow.format(now.getTime()); String before; before = textArea1.getText(); textArea1.setText(shijian+"\n"+before); } } // ********************************** 帮助栏关于我们 ******************************************** private class HelpListener implements ActionListener { public void actionPerformed(ActionEvent event) { JFrame dialog1 = new JFrame(); help help1 = new help(); } } //*********************************************************************主要响应器end***************************************************** //*********************************************************************主要响应器end***************************************************** //*********************************************************************主要响应器end***************************************************** //*******************************************************************行高 数插件***************************************************** private class line extends JDialog { public line() { super(); JPanel panel2 = new JPanel(); int a = textArea1.getLineCount(); String b = "当前行高数:"+a; JLabel label2 = new JLabel(b, JLabel.CENTER); Font font = new Font(Font.DIALOG, Font.PLAIN, 20); //设置字体! add(label2,BorderLayout.NORTH); Frame.this.setVisible(true); JButton haode = new JButton("确定"); panel2.add(haode); haode.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { setVisible(false); } }); Dimension SCREEN2 = Toolkit.getDefaultToolkit().getScreenSize(); int WIDTH2 = (int) SCREEN2.getWidth(); int HEIGHT2 = (int) SCREEN2.getHeight(); setLocation(WIDTH2 / 3, HEIGHT2 / 3); setTitle("关于我们"); b = null; add(panel2,BorderLayout.SOUTH); setVisible(true); setSize(290,170);//这是对一个类进行操作 } } //*************************************** 辅助帮助************************************* private class help extends JDialog{ public help (){ super(); JPanel panel2 = new JPanel(); JLabel label1 = new JLabel("version:1.01 MSCnotepad",JLabel.CENTER); //JLabel.CENTER可以实现将label文字放在居中位置 JLabel label2 = new JLabel("如有任何问题请您咨询大豆豆",JLabel.CENTER); Font font = new Font(Font.DIALOG, Font.PLAIN, 20); //设置字体! label1.setFont(font); //设置字体! add(label1,BorderLayout.NORTH); add(label2); JButton haode = new JButton("确定"); panel2.add(haode); haode.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event) { { setVisible(false); } } }); Dimension SCREEN2 = Toolkit.getDefaultToolkit().getScreenSize(); int WIDTH2 = (int) SCREEN2.getWidth(); int HEIGHT2 = (int) SCREEN2.getHeight(); setLocation(WIDTH2 / 3, HEIGHT2 / 3); setTitle("关于我们"); add(panel2,BorderLayout.SOUTH); setSize(290,170);//这是对一个类进行操作 setVisible(true); }//************************************** 保存失败插件**************************************************** } private class cannotsave extends JDialog{ public cannotsave (){ super(); JPanel panel2 = new JPanel(); JLabel label1 = new JLabel("您还未选择路径",JLabel.CENTER); //JLabel.CENTER可以实现将label文字放在居中位置 JLabel label2 = new JLabel("请您设置另存为",JLabel.CENTER); Font font = new Font(Font.DIALOG, Font.PLAIN, 20); //设置字体! label1.setFont(font); //设置字体! add(label1,BorderLayout.NORTH); add(label2); JButton saveas = new JButton("另存为"); JButton okokok = new JButton("取消"); panel2.add(saveas); panel2.add(okokok); saveas.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event) { { setVisible(false); // 使用外部类 saveas.addActionListener(new SaveAnotherListener()); FileNameExtensionFilter filter2 = new FileNameExtensionFilter("文本文件", "txt");//设置filechooser。文件过滤器只选择txt类 chooser.setFileFilter(filter2); chooser.setFileView(new FileIconView(filter2, null)); chooser.setCurrentDirectory(new File("/Users/frankdura/Desktop"));//默认的文件打开路径.否则为自己的文件夹 int result = chooser.showSaveDialog(Frame.this); //显示文件选择对话框 if (result == JFileChooser.APPROVE_OPTION) { String name = chooser.getSelectedFile().getPath(); File dataFile = new File(name); FileWriter fr; BufferedWriter br; try { fr = new FileWriter(name); br = new BufferedWriter(fr); br.write(textArea1.getText()); br.flush(); br.close(); fr.close(); } catch (FileNotFoundException e) { System.out.println("对不起,保存失败。原因如下:" + e.getMessage()); } catch (IOException e) { e.printStackTrace(); } } } } }); okokok.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { setVisible(false); } }); Dimension SCREEN2 = Toolkit.getDefaultToolkit().getScreenSize(); //toolkit int WIDTH2 = (int) SCREEN2.getWidth(); int HEIGHT2 = (int) SCREEN2.getHeight(); setLocation(WIDTH2 / 3, HEIGHT2 / 3); setTitle("关于我们"); add(panel2,BorderLayout.SOUTH); setSize(290,170);//这是对一个类进行操作 setVisible(true); } } //****************************** //************************************************************************************* private class FileIconView extends FileView { public FileIconView(FileFilter aFilter, Icon anIcon) { filter = aFilter; icon = anIcon; } public Icon getIcon(File f) { if (!f.isDirectory() && filter.accept(f)) { return icon; } else { return null; } } private FileFilter filter,filer2,filter3; private Icon icon,icon2; //************************************************************************************* } JTextArea textArea1; private JFileChooser chooser;}
0 0
- 如何用java写一个简单的记事本。
- 如何用Java写一个简单的代理Web服务器
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用C#写一个简单的Login窗口
- 如何用jquery写一个简单的返回顶部
- 如何用C++写一个简单的小游戏?
- javascript如何用递归写一个简单的树形结构
- javascript如何用递归写一个简单的树形结构
- 微信JSSDK 突然出现invalid signature无效签名
- Tomcat的使用(详细流程)
- [ATF]ARMv8 psci cpu off api
- 生产者与消费者(一)
- 菜鸟刷leetcode 19. Remove Nth Node From End of List
- 如何用java写一个简单的记事本。
- Remote Debugging之放开那个webview让我来调戏(试)
- 商城购物车模块-自定义数字加减控件
- log4j将包内的所有类日志指定文件输出
- jsp九大内置对象
- 应用大数据和机器学习技术实现车险全流程智能化的方案(中) -理赔流程智能化改造
- 最长路问题
- OpenGL(一)绘制圆、五角星、正弦曲线
- hdu 5978 To begin or not to begin