java记事本如何显示版本信息_java记事本功能如何实现?实例代码展示

在科学技术发展日新月异的今时今日,一门新技术的掌握就显得举足轻重了。很多人选择去学习java语言以谋求更高的薪资和更好的生活水平。今天就来为大家介绍一下java记事本功能如何实现,并且通过实际的代码为大家展示,一起来看看吧。

一、java记事本功能的实现

1、实现了记事本的文件打开和保存功能(主要功能);

2、更换了标题栏默认的java图标,改成记事本图标;

3、记事本输入框采用滚动条加文本框设计;

4、实现了文件读取、写入、命名、路径选择等功能;

5、文中多次运用JOptionPane和JFileChooser对话框,尽量做到与windows运行机制一样,包含大量操作提示信息;

6、重写了窗体关闭事件方法,点击关闭按钮时,先做文件是否保存判断,若文件已保存则直接退出程序,否则弹出是否保存文件对话框;

二、实际的代码如下所示:package com.liao.notepad0822;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

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.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.IOException;

import java.io.OutputStreamWriter;

import javax.swing.ImageIcon;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

public class MainUI extends JFrame

{

private static final long serialVersionUID = -8533346717300013642 L;

private JTextArea jta;

private JScrollPane jsp;

private static String name;

private JFileChooser jfc = new JFileChooser();

public static void main(String[] args)

{

new MainUI()

.init();

}

// 初始化界面

public void init()

{

setSize(800, 600);

setLocationRelativeTo(null);

// 设置关闭按钮动作不执行任何操作

setDefaultCloseOperation(0);

name = "新建文本文档.txt";

// 设置标志图案

ImageIcon ii = new ImageIcon("file\\1.png");

setIconImage(ii.getImage());

// 设置文件名

setTitle(name + " - 记事本");

// 添加菜单栏

addMenu();

// 添加文本框

jta = new JTextArea();

// 添加滚动条

jsp = new JScrollPane(jta);

jsp.setPreferredSize(new Dimension(780, 550));

add(jsp, BorderLayout.CENTER);

setVisible(true); // 设置窗口可见

addWindowListener(new WindowAdapter()

{

@Override

public void windowClosing(WindowEvent e)

{

if (showSaveDialog() != JOptionPane.CANCEL_OPTION) // 若不是取消按钮,关闭程序

setDefaultCloseOperation(3);

}

});

}

// 添加菜单栏

private void addMenu()

{

// 添加菜单栏

JMenuBar jmb = new JMenuBar();

// 设置菜单栏位置在顶级窗口的顶部

setJMenuBar(jmb);

// 菜单栏菜单

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

JMenu jm_edit = new JMenu("编辑");

jmb.add(jm_file);

jmb.add(jm_edit);

// 给文件菜单添加菜单项

JMenuItem item1 = new JMenuItem("打开");

JMenuItem item2 = new JMenuItem("保存");

jm_file.add(item1);

jm_file.add(item2);

// "打开"菜单项添加动作监听器

item1.addActionListener(new ActionListener()

{

@Override

public void actionPerformed(ActionEvent e)

{

// 是否保存对原文件修改

if (showSaveDialog() == JOptionPane.CANCEL_OPTION)

{ // 取消按钮,则返回

return;

}

// 弹出一个 "Open File" 文件选择器对话框

int select = jfc.showOpenDialog(MainUI.this);

// 选择打开文件,则读写文件

if (select == JFileChooser.APPROVE_OPTION)

{

jta.setText(readFile()); // 写入文本框

jta.setCaretPosition(0); // 定位光标至行首

}

}

});

// “保存”菜单项添加动作监听器

item2.addActionListener(new ActionListener()

{

@Override

public void actionPerformed(ActionEvent e)

{

if (jfc.getSelectedFile() == null)

{

createFile(); //调用创建文件方法

}

else

{

showSaveDialog(); //调用文件是否保存方法

}

}

});

}

// 读取文件

private String readFile()

{

// 声明缓冲字符流变量

BufferedReader br = null;

StringBuilder sb = null;

try

{

br = new BufferedReader(new FileReader(jfc.getSelectedFile()));

sb = new StringBuilder(); // 创建缓冲字符串

String str;

int count = 0; //控制添加换行符,与原文保持一致

while ((str = br.readLine()) != null)

{

if (count == 0)

sb.append(str);

if (count++ != 0)

sb.append("\n" + str); // 添加换行

}

}

catch (FileNotFoundException e1)

{

// 弹出“文件未找到”对话框,返回null

JOptionPane.showMessageDialog(null, "未找到该文件!");

return null;

}

catch (IOException e1)

{

// 弹出“文件读取异常”对话框,返回null

JOptionPane.showMessageDialog(null, "文件读取异常");

return null;

}

finally

{

// 关闭字符流

if (br != null)

try

{

br.close();

}

catch (IOException e1)

{

e1.printStackTrace();

}

}

name = jfc.getSelectedFile()

.getName();

setTitle(name + " - 记事本"); //设置文件名

return sb.toString();

}

// 保存对话框

private int showSaveDialog()

{

int select = 0;

// 判断文本框是否为空

if (!jta.getText()

.equals(""))

{

// 判断文件是否为空

if (jfc.getSelectedFile() == null)

{

select = JOptionPane.showConfirmDialog(MainUI.this, "是否保存修改?");

if (select == JOptionPane.YES_OPTION)

{

createFile(); //文件不存在,则创建文件

}

}

else

{

if (!isSaved())

{ // 文件未保存

select = JOptionPane.showConfirmDialog(MainUI.this, "是否保存修改?");

if (select == JOptionPane.YES_OPTION)

{

saveFile(jfc.getSelectedFile());

}

}

}

}

return select; // 返回选项

}

// 创建新文件

private void createFile()

{

// String name = null;

File file = null;

// 选择保存或取消

if (jfc.showSaveDialog(MainUI.this) == JFileChooser.APPROVE_OPTION)

{

file = jfc.getSelectedFile(); // 获取选中的文件

}

else

{

return;

}

name = jfc.getName(file); // 获取输入的文件名

if (file.exists())

{ // 若选择已有文件----询问是否要覆盖

int i = JOptionPane.showConfirmDialog(null, "该文件已存在,是否覆盖原文件", "确认", JOptionPane.YES_NO_OPTION);

if (i == JOptionPane.YES_OPTION)

{

saveFile(file);

}

else

{

jfc.showSaveDialog(MainUI.this); // 重新选择

}

}

else

{ //文件不存在,则直接保存

saveFile(file);

}

}

// 判断文件是否保存

private Boolean isSaved()

{

// 比较内容

if (jta.getText()

.equals(readFile()))

{

return true;

}

return false;

}

// 保存文件,文件不存在则创建新文件

private void saveFile(File file)

{

BufferedWriter bw = null;

try

{

bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));

bw.write(jta.getText()); //写入文件

bw.flush();

}

catch (FileNotFoundException e1)

{

JOptionPane.showMessageDialog(MainUI.this, "文件保存出错" + e1.getMessage());

}

catch (IOException e1)

{

e1.printStackTrace();

}

finally

{

try

{

if (bw != null)

bw.close();

}

catch (IOException e1)

{}

}

}

}

以上就是关于java记事本功能如何实现的主要内容了。并且通过代码实例方便大家更好的理解。想要了解更多java经典例子以及常见问题,敬请关注奇Q工具网。

推荐阅读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值