java记事本打开功能_Java简易实现记事本的打开与保存

记事本的打开与保存

一些总结

* Swing中有时方法不显示,需要把方setVisible(true)放到最后执行

* AWT中的TextArea默认是中间布局

* fileDialog对话框Load模式需要对取消事件进行处理

* 快捷键使用需要用到JmenuItem

主方法

package cn.work.demo.demo03;

public class NotePad {

public static void main(String[] args) {

NotepadWindow MyNotePad = new NotepadWindow();

//生成窗体

MyNotePad.frameWindow();

}

}

窗口面板

package cn.work.demo.demo03;

import javax.swing.*;

import java.awt.*;

import java.awt.event.KeyEvent;

public class NotepadWindow {

//静态文本区域对象,由该类调用

static TextArea textArea;

//记事本窗体

public void frameWindow() {

//新建一个JFrame窗体,并为其实现Swing程序中的各个组件

JFrame frame = new JFrame("记事本");

//窗口大小

frame.setSize(1200,680);

//设置窗口在屏幕的位置,null居中

frame.setLocationRelativeTo(null);

//设置关闭响应,直接关闭

frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

//添加记事本的文本区域

addTextArea(frame);

//添加窗口的菜单项

addMenu(frame);

//窗口可见

frame.setVisible(true);

}

//记事本的文本区域

private void addTextArea(JFrame frame) {

textArea = new TextArea();

//设置字体显示格式

textArea.setFont(new Font("宋体",Font.PLAIN,23));

frame.add(textArea);

}

//记事本的菜单

private void addMenu(JFrame frame) {

//使用Swing工具包替代AWT,方便添加快捷键

//创建菜单栏对象

JMenuBar menuBar = new JMenuBar();

//创建“文件”菜单

JMenu file = new JMenu("文 件");

// 创建 打开 菜单选项

JMenuItem open = new JMenuItem("打开文件 ");

open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,

java.awt.Event.CTRL_MASK));

// 创建 保存 菜单选项

JMenuItem save = new JMenuItem("保存文件 ");

save.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S,java.awt.Event.CTRL_MASK));

//把菜单栏添加到窗口上

frame.setJMenuBar(menuBar);

//把file添加到菜单栏中

menuBar.add(file);

//将选项添加进file中

file.add(open);

file.add(save);

//给 打开 添加OpenActionListener监听器

open.addActionListener(new OpenActionListener(frame));

//给 保存 SaveActionListener监听器

save.addActionListener(new SaveActionListener(frame));

}

}

"打开"监听器

package cn.work.demo.demo03;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

// "打开" 监听器从硬盘文件中读入内容

public class OpenActionListener implements ActionListener {

//定义一个窗体容器用来接受传入的窗体

private JFrame frame;

//构造方法接受传送进来的窗体

OpenActionListener(JFrame frame){

this.frame = frame;

}

//必须要重写ActionListener的抽象方法,写入事件发生后需要执行的内容

@Override

public void actionPerformed(ActionEvent e) {

//创建一个文件对话框,默认load,传入对话框窗体frame

FileDialog fileDialog = new FileDialog(frame);

//显示文件选择对话框

fileDialog.setVisible(true);

//获取选择的目录路径

//获取选择的文件名

//获取文件的绝对路径

String absPath = fileDialog.getDirectory() + fileDialog.getFile();

//如果选中文件,但点击了取消,会得到null直接返回null,不影响后续操作

if(fileDialog.getFile() == null){

System.out.println(fileDialog.getFile());

return;

}

BufferedReader bufre = null;

//try catcah 处理编译异常

try {

//创建字符缓冲输入流对象,构造方法由字符输入流绑定输入地址

bufre = new BufferedReader(new FileReader(absPath));

//创建字节数组,存储读入的数据

char[] chars = new char[1024];

//len为读取的有效位数

int len = 0;

//打开前清空文本区域

NotepadWindow.textArea.setText("");

//使用read读取内容

while ((len = bufre.read(chars)) != -1) {

//提取每次读的字符,生成字符串

String str = new String(chars,0,len);

//拼接每一次得到的字符串

NotepadWindow.textArea.append(str);

}

bufre.close();

}catch(IOException obj){

//获取异常信息

obj.getMessage();

}

}

}

“保存”监听器

package cn.work.demo.demo03;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

// "保存" 监听器从硬盘文件中读入内容

public class SaveActionListener implements ActionListener{

//定义一个窗体容器用来接受传入的窗体

private JFrame frame;

//构造方法接受传送进来的窗体

SaveActionListener(JFrame frame){

this.frame = frame;

}

@Override

public void actionPerformed(ActionEvent e) {

//创建一个文件对话框,传入对话框窗体frame

FileDialog fileDialog = new FileDialog(frame);

//设置为SAVE模式

fileDialog.setTitle("保存");

fileDialog.setMode(FileDialog.SAVE);

//显示文件选择对话框

fileDialog.setVisible(true);

//获取保存的目录路径

String absPath = fileDialog.getDirectory() +fileDialog.getFile();

BufferedWriter bufw = null;

try {

//字符缓冲输出流,构造方法传入字符输出流绑定输出路径

bufw = new BufferedWriter(new FileWriter(absPath));

String str = NotepadWindow.textArea.getText();

//向文件写入数据

bufw.write(str);

//关闭并刷新输出流

bufw.close();

}catch (IOException obj){

obj.getMessage();

}

}

}

bug:swing编程时而不显示菜单选项,改变语句顺课序解决,后查阅资料需要将可见性设置在逻辑最后。

12.JAVA之GUI编程打开与保存文件

功能:java图形用户界面开发,练习打开保存文件 代码如下: import java.awt.FileDialog; import java.awt.Frame; import java.awt.Me ...

[转载]Java开发在线打开编辑保存Word文件

Java调用logo是“P”图标的第三方插件,实现在线编辑保存Word文件(以jsp调用为例,支持SSM.SSH.SpringMVC等流行框架) 工具/原料   Eclipse或MyEclipse等j ...

[原创]Java开发在线打开编辑保存Word文件(支持多浏览器)

Java调用PageOffice实现在线编辑保存Word文件(以jsp调用为例,支持SSM.SSH.SpringMVC等流行框架) 1. 下载PageOffice开发包:http://www.zhuo ...

java简易编辑器

package peng_jun; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...

编写运行最简单的java程序——使用记事本编写java程序

第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还没有搭建环境变量的小伙伴请转移到上一篇的随笔中去完成搭建. ...

ajax返回json在 IE下,提示打开或保存的解决方法

Content-type要设置成 text/html 我是用的mvc jquery.form.js 提交的表单. 返回json响应数据. 结果在ie下提示打开或保存,查看保存的内容.就是我返回的jso ...

java io流 运行错误时,保存异常到文件里面

java io流 运行错误时,保存异常到文件里面 下面这个实例,运行后,输入数字,为正确,如果输入字符串,则报错,保存错误信息 //运行错误时,保存异常到文件里面 //下面这个实例,运行后,输入数字, ...

1、Qt Project之基本文件打开与保存

基本文件打开与保存: 首先是涉及到的头文件,我们需要在mainwindow.h包含头文件: #include #include #i ...

xpython在Windos下的安装及简单的文本打开、保存

前几天写自动化部署脚本,用的是paramiko和shell相结合,paramiko可是实现ssh登录,文件及文件夹的上传下载,这些功能,然后一直想自己写个东西出来,于是就想把这些功能我把他放到图形化界 ...

随机推荐

ASP.NET MVC 5 系列 学习笔记 目录 (持续更新...)

前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...

使用SignalR+Asp.net创建实时聊天应用程序

一.概述: 使用 ASP.NET 那么 SignalR 2 创建一个实时聊天应用程序.将 SignalR 添加 MVC 5 应用程序中,并创建聊天视图发送并显示消息. 在Demo中,将学习Signal ...

android图像处理系列之三--图片色调饱和度、色相、亮度处理

原图: 处理后: 下面贴代码: 一.图片处理层: package com.jacp.tone.view; import java.util.ArrayList; import android.cont ...

oracle数据库删除数据Delete语句和Truncate语句的对比

oracle数据库删除数据Delete语句和Truncate语句的对比 当表中的数据不需要时,则应该删除该数据并释放所占用的空间,删除表中的数据可以使用Delete语句或者Truncate语句,下面分 ...

Xcode极速代码,征服Xcode

当谈论到iOS开发工具时,有一个肯定是所有iOS开发者都熟悉的,那就是Xcode.Xcode是使所有令人赞叹的iOS app成为可能的驱动力. Xcode能帮助我们完成非常多的事情,但是这也有点让人头 ...

洛谷 P1057 解题报告

P1057 传球游戏 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹 ...

2198: 小P当志愿者送餐

题目描述 在ICPC程序设计大赛期间,小P作为志愿者的任务是给各个学校送盒饭,小P一次最多可以携带M份盒饭.总共有N个学校来参加比赛,这N个学校的休息点在一条笔直的马路边一字排开,路的一头是小P取盒饭 ...

极光推送 JPush 简介 集成 MD

Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

TPshop隐藏index.php

有些朋友提到关于TPshop 隐藏index.php 一问题, 可以修改 Application\Common\Conf\config.php 文件代码 'common', 'AUTH_CODE' = ...

py_faster_rcnn识别出来的结果好多红框重叠

py_faster_rcnn识别出来的结果好多红框重叠, 可以通过调节demo.py中的NMS_THRESH的值进行限制. NMS_THRESH表示非极大值抑制,这个值越小表示要求的红框重叠度越小,0 ...

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.BorderFactory; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; public class JNotePadUI extends JFrame { private JMenuItem menuOpen; private JMenuItem menuSave; private JMenuItem menuSaveAs; private JMenuItem menuClose; private JMenu editMenu; private JMenuItem menuCut; private JMenuItem menuCopy; private JMenuItem menuPaste; private JMenuItem menuAbout; private JTextArea textArea; private JLabel stateBar; private JFileChooser fileChooser; private JPopupMenu popUpMenu; public JNotePadUI() { super("新建文本文件"); setUpUIComponent(); setUpEventListener(); setVisible(true); } private void setUpUIComponent() { setSize(640, 480); // 菜单栏 JMenuBar menuBar = new JMenuBar(); // 设置「文件」菜单 JMenu fileMenu = new JMenu("文件"); menuOpen = new JMenuItem("打开"); // 快捷键设置 menuOpen.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_O, InputEvent.CTRL_MASK)); menuSave = new JMenuItem("保存"); menuSave.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK)); menuSaveAs = new JMenuItem("另存为"); menuClose = new JMenuItem("关闭"); menuClose.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, InputEvent.CTRL_MASK)); fileMenu.add(menuOpen); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuSave); fileMenu.add(menuSaveAs); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuClose); // 设置「编辑」菜单 JMenu editMenu = new JMenu("编辑"); menuCut = new JMenuItem("剪切"); menuCut.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); menuCopy = new JMenuItem("复制"); menuCopy.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); menuPaste = new JMenuItem("粘贴"); menuPaste.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); editMenu.add(menuCut); editMenu.add(menuCopy); editMenu.add(menuPaste); // 设置「关于」菜单 JMenu aboutMenu = new JMenu("关于"); menuAbout = new JMenuItem("关于JNotePad"); aboutMenu.add(menuAbout); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(aboutMenu); setJMenuBar(menuBar); // 文字编辑区域 textArea = new JTextArea(); textArea.setFont(new Font("宋体", Font.PLAIN, 16)); textArea.setLineWrap(true); JScrollPane panel = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); Container contentPane = getContentPane(); contentPane.add(panel, BorderLayout.CENTER); // 状态栏 stateBar = new JLabel("未修改"); stateBar.setHorizontalAlignment(SwingConstants.LEFT); stateBar.setBorder( BorderFactory.createEtchedBorder()); contentPane.add(stateBar, BorderLayout.SOUTH); popUpMenu = editMenu.getPopupMenu(); fileChooser = new JFileChooser(); } private void setUpEventListener() { // 按下窗口关闭钮事件处理 addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { closeFile(); } } ); // 菜单 - 打开 menuOpen.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { openFile(); } } ); // 菜单 - 保存 menuSave.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFile(); } } ); // 菜单 - 另存为 menuSaveAs.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFileAs(); } } ); // 菜单 - 关闭文件 menuClose.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { closeFile(); } } ); // 菜单 - 剪切 menuCut.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { cut(); } } ); // 菜单 - 复制 menuCopy.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { copy(); } } ); // 菜单 - 粘贴 menuPaste.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { paste(); } } ); // 菜单 - 关于 menuAbout.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { // 显示对话框 JOptionPane.showOptionDialog(null, "程序名称:\n JNotePad \n" + "程序设计:\n \n" + "简介:\n 一个简单的文字编辑器\n" + " 可作为验收Java实现对象\n" + " 欢迎网友下载研究交流\n\n" + " /", "关于JNotePad", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null); } } ); // 编辑区键盘事件 textArea.addKeyListener( new KeyAdapter() { public void keyTyped(KeyEvent e) { processTextArea(); } } ); // 编辑区鼠标事件 textArea.addMouseListener( new MouseAdapter() { public void mouseReleased(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON3) popUpMenu.show(editMenu, e.getX(), e.getY()); } public void mouseClicked(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1) popUpMenu.setVisible(false); } } ); } private void openFile() { if(isCurrentFileSaved()) { // 文件是否为保存状态 open(); // 打开 } else { // 显示对话框 int option = JOptionPane.showConfirmDialog( null, "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { // 确认文件保存 case JOptionPane.YES_OPTION: saveFile(); // 保存文件 break; // 放弃文件保存 case JOptionPane.NO_OPTION: open(); break; } } } private boolean isCurrentFileSaved() { if(stateBar.getText().equals("未修改")) { return false; } else { return true; } } private void open() { // fileChooser 是 JFileChooser 的实例 // 显示文件选取的对话框 int option = fileChooser.showDialog(null, null); // 使用者按下确认键 if(option == JFileChooser.APPROVE_OPTION) { try { // 开启选取的文件 BufferedReader buf = new BufferedReader( new FileReader( fileChooser.getSelectedFile())); // 设定文件标题 setTitle(fileChooser.getSelectedFile().toString()); // 清除前一次文件 textArea.setText(""); // 设定状态栏 stateBar.setText("未修改"); // 取得系统相依的换行字符 String lineSeparator = System.getProperty("line.separator"); // 读取文件并附加至文字编辑区 String text; while((text = buf.readLine()) != null) { textArea.append(text); textArea.append(lineSeparator); } buf.close(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "开启文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFile() { // 从标题栏取得文件名称 File file = new File(getTitle()); // 若指定的文件不存在 if(!file.exists()) { // 执行另存为 saveFileAs(); } else { try { // 开启指定的文件 BufferedWriter buf = new BufferedWriter( new FileWriter(file)); // 将文字编辑区的文字写入文件 buf.write(textArea.getText()); buf.close(); // 设定状态栏为未修改 stateBar.setText("未修改"); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "写入文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFileAs() { // 显示文件对话框 int option = fileChooser.showSaveDialog(null); // 如果确认选取文件 if(option == JFileChooser.APPROVE_OPTION) { // 取得选择的文件 File file = fileChooser.getSelectedFile(); // 在标题栏上设定文件名称 setTitle(file.toString()); try { // 建立文件 file.createNewFile(); // 进行文件保存 saveFile(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "无法建立新文件", JOptionPane.ERROR_MESSAGE); } } } private void closeFile() { // 是否已保存文件 if(isCurrentFileSaved()) { // 释放窗口资源,而后关闭程序 dispose(); } else { int option = JOptionPane.showConfirmDialog( null, "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { case JOptionPane.YES_OPTION: saveFile(); break; case JOptionPane.NO_OPTION: dispose(); } } } private void cut() { textArea.cut(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void copy() { textArea.copy(); popUpMenu.setVisible(false); } private void paste() { textArea.paste(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void processTextArea() { stateBar.setText("已修改"); } public static void main(String[] args) { new JNotePadUI(); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值