如何用java一步步编出一个记事本程序

作者&投稿:成荣 (若有异议请与网页底部的电邮联系)
如何用JAVA程序编写一个记事本~

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.UndoManager;
import java.util.Date;
import java.text.SimpleDateFormat;

public class Notepad extends JFrame {
// 菜单
JMenuBar menub = new JMenuBar();
// 显示纯文本的多行区域
JTextArea text = new JTextArea();
JMenu files = new JMenu("文件(F)");
JMenu edit = new JMenu("编辑(E)");
JMenu formats = new JMenu("格式(O)");
JMenu help = new JMenu("帮助(H)");
JMenuItem newFile = new JMenuItem("新建(N)");
JMenuItem open = new JMenuItem("打开(O)");
JMenuItem save = new JMenuItem("保存(S)");
JMenuItem saveAs = new JMenuItem("另存为(A)");
JMenuItem exit = new JMenuItem("退出(X)");
JMenuItem undo = new JMenuItem("撤销(U)");
JMenuItem cut = new JMenuItem("剪切(T)");
JMenuItem copy = new JMenuItem("复制(C)");
JMenuItem paste = new JMenuItem("粘贴(P)");
JMenuItem selectAll = new JMenuItem("全选(A)");
JMenuItem timeDate = new JMenuItem("时间/日期(D)");
JCheckBoxMenuItem lineWrap = new JCheckBoxMenuItem("自动换行(M)");
JMenuItem fonts = new JMenuItem("字体");
JMenuItem about = new JMenuItem("关于记事本(A)");
JFrame th = this;
String name;
String openedPath = null;
boolean opened = false;
boolean reworked = false;
UndoManager undoManager = new UndoManager();

// 初始化窗体
public Notepad(String name) {
super(name);
this.name = name;
int x, y;
// 得到用户屏幕大小
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
x = (size.width - 600) / 2;
y = (size.height - 400) / 2;
setSize(600, 400);
// 让程序界面显示在屏幕中央
setLocation(x, y);
// 将此窗口的最小大小设置为一个常量值。
setMinimumSize(new Dimension(250, 150));
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

// 初始化布局
void init() {
files.setMnemonic('F');
edit.setMnemonic('E');
formats.setMnemonic('O');
help.setMnemonic('H');
newFile.setMnemonic('N');
open.setMnemonic('O');
save.setMnemonic('S');
saveAs.setMnemonic('A');
exit.setMnemonic('X');
undo.setMnemonic('U');
cut.setMnemonic('T');
copy.setMnemonic('C');
paste.setMnemonic('P');
selectAll.setMnemonic('A');
timeDate.setMnemonic('D');
lineWrap.setMnemonic('M');
about.setMnemonic('A');
// 为控件添加助记符
newFile.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));
exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
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));
selectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
InputEvent.CTRL_MASK));
// 为控件添加快捷键
timeDate.setAccelerator(KeyStroke.getKeyStroke("F5"));

files.add(newFile);
files.add(open);
files.add(save);
files.add(saveAs);
files.addSeparator();
files.add(exit);
edit.add(undo);
edit.addSeparator();
edit.add(cut);
edit.add(copy);
edit.add(paste);
edit.addSeparator();
edit.add(selectAll);
edit.add(timeDate);
formats.add(lineWrap);
formats.add(fonts);
help.add(about);

menub.add(files);
menub.add(edit);
menub.add(formats);
menub.add(help);
setJMenuBar(menub);
getContentPane().add(new JScrollPane(text));

Listen listen = new Listen();
Listen1 listen1 = new Listen1();
// 为控件添加事件侦听器
newFile.addActionListener(listen);
undo.addActionListener(listen);
open.addActionListener(listen);
save.addActionListener(listen);
saveAs.addActionListener(listen);
exit.addActionListener(listen);
cut.addActionListener(listen);
copy.addActionListener(listen);
paste.addActionListener(listen);
selectAll.addActionListener(listen);
timeDate.addActionListener(listen);
lineWrap.addActionListener(listen);
about.addActionListener(listen);
open.addActionListener(listen1);
save.addActionListener(listen1);
saveAs.addActionListener(listen1);
// 暂时没有实现的功能 :设置字体
//undo功能没有实现
fonts.setEnabled(false);

}
class Listen implements ActionListener {
// 实现用于一般操作的事件侦听器
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == newFile) {
text.setText("");
// 设置标题
th.setTitle(name);
openedPath = null;
opened = false;
} else if (source == exit)
setVisible(false);
else if (source == undo)
try {
//此功能没有实现 撤销要用栈?
// undo.setEnabled(undoManager.canUndo());
undoManager.undo();
} catch (CannotRedoException cre) {
cre.printStackTrace();
}
else if (source == selectAll)
text.selectAll();
else if (source == cut)
text.cut();
else if (source == copy)
text.copy();
else if (source == paste)
text.paste();
else if (source == lineWrap)
// 设置文本区的换行策略(获取文本区的换行策略)
text.setLineWrap(!text.getLineWrap());
else if (source == about) {
String message = "--------
版本:1.0
作者:时超" +
"
撤销功能要用堆栈存贮操作" +
"
还有字体格式"+
"
暂时没有实现" +
"

感谢您的使用";
JOptionPane.showMessageDialog(th, message, "关于",
JOptionPane.PLAIN_MESSAGE);
} else if (source == timeDate) {
Date nowTime = new Date();
SimpleDateFormat times = new SimpleDateFormat(
"HH:mm yyyy-MM-dd");
text.insert(times.format(nowTime), text.getCaretPosition());
}
}
}
class Listen1 implements ActionListener {
// 实现用于对文件进行操作的事件侦听器
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
// 打开文件事件
if (source == open) {
// 显示对话窗口 以便选择文件
FileDialog openFile = new FileDialog(th, "打开文件",
FileDialog.LOAD);
openFile.setVisible(true);
// 获取文件路径
String filePath = openFile.getDirectory() + openFile.getFile();
try {
FileInputStream fis = new FileInputStream(filePath);
byte[] content = new byte[fis.available()];
fis.read(content);
text.setText(new String(content));
// 设置 TextComponent 的文本插入符的位置
text.setCaretPosition(0);
if (openFile.getFile() != null) {
th.setTitle(openFile.getFile() + name);
openedPath = filePath;
opened = true;
}
fis.close();
} catch (Exception ex) {
ex.printStackTrace();
}
opened = true;
}
// 保存及另存为事件
else if (source == save || source == saveAs) {
String savePath = openedPath;
if (savePath == null || source == saveAs) {
// 如果 mode 的值为 LOAD,那么文件对话框将查找要读取的文件,所显示的文件是当前目录中的文件
// 如果 mode 的值为 SAVE,则文件对话框将查找要写入文件的位置。
FileDialog saveFile = new FileDialog(th, "保存文件",
FileDialog.SAVE);
saveFile.setVisible(true);
savePath = saveFile.getDirectory() + saveFile.getFile();
}
try {
FileOutputStream fos = new FileOutputStream(savePath);
fos.write(text.getText().getBytes());
fos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
if (source == save)
openedPath = savePath;
}
}
}
public static void main(String[] args) {
try {
// 使用当前线程的上下文类加载器加载给定类名称所指定的 LookAndFeel
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
System.err.println("Couldn't use the system look and feel:" + e);
}
String name = ("--记事本 版本1.0--");
Notepad note = new Notepad(name);
note.init();
note.setVisible(true);
}
}

这个你要直接的code给你我是没有的,我给你的答案是用编辑器自己编写,如果你没有java基础,你要学,如果你不会java swing,也要学,当你写出来了,你会发现,剩下的几个问题都引刃而解

一、要创建一个Frame或者JFrame现在基本上都用后者
二、要建立你的控件,就是面板Jpanel菜单JMenu\JMenuItem等,写字板textArea等,
三、动作监听器,addActionListener
四、就是你的布局了

一下是一个可以运行的,你看看

package mySwing;

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.color.*;
import java.awt.font.*;

import javax.swing.plaf.metal.MetalLookAndFeel;
import javax.swing.undo.*;

public class Note extends JFrame {
boolean isChange = false;

boolean wasChange = false;

JMenuBar menuBar = new JMenuBar();

JMenu menuFile = new JMenu("File");

JMenuItem menuFileOpen = new JMenuItem("Open..");

JMenuItem menuFileSave = new JMenuItem("Save..");

JMenuItem menuFileExit = new JMenuItem("Exit");

JMenu menuEdit = new JMenu("Edit");

JMenuItem menuFileCut = new JMenuItem("Cut");

JMenuItem font = new JMenuItem("Font");

JMenuItem menuFilePaste = new JMenuItem("Paste");

JTextArea fileArea = new JTextArea();

public Note() {
//menuFile.setIcon(new ImageIcon("D:\\���컢���ļ�\\eclipswork\\MyTest\\bin\\remove.png"));
// fileArea.setBorder(BorderFactory.createTitledBorder("mytextArea"));
this.setTitle("���±�");
Toolkit tool = this.getToolkit();// ����ͼ�꣡
Image myimage = tool.getImage("����.jpg");
this.setIconImage(myimage);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
exit();
}
});
menuFileOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//fileOpen_actionPerformed(e);

}
});
menuFileSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fileSave_actionPerformed(e);
}
});
menuFileExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fileExit_actionPerformed(e);
}
});
menuFileCut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fileCut_actionPerformed(e);
}
});
menuFilePaste.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
filePaste_actionPerformed(e);
}
});
font.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fileColor_actionPerformed(e);
}
});
fileArea.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
wasChange = isChange;
isChange = true;
}

public void removeUpdate(DocumentEvent e) {
wasChange = isChange;
isChange = true;
}

public void changedUpdate(DocumentEvent e) {
wasChange = isChange;
isChange = true;
}
});
setSize(500, 450);
menuBar.add(menuFile);
menuFile.setMnemonic('F');
menuBar.add(menuEdit);
menuEdit.setMnemonic('E');
menuFile.add(menuFileOpen);
menuFileOpen.setMnemonic('O');// ���ʽ�;
menuFileOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK));// ��ݽ�;
menuFile.add(menuFileSave);
menuFileSave.setMnemonic('S');
menuFileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK));
menuFile.addSeparator();
menuFile.add(menuFileExit);
menuFileExit.setMnemonic('E');
menuEdit.add(menuFileCut);
menuFileCut.setMnemonic('C');
menuFileCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_MASK));
menuEdit.add(menuFilePaste);
menuFilePaste.setMnemonic('P');
menuFilePaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
InputEvent.CTRL_MASK));
menuEdit.add(font);
font.setMnemonic('N');
font.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
InputEvent.CTRL_MASK));
this.getContentPane().add(new JScrollPane(fileArea));
setJMenuBar(menuBar);
fileArea.setLineWrap(true);
}

public void fileExit_actionPerformed(ActionEvent e) {
System.exit(0);
}

public void fileOpen_actionPerformed(ActionEvent e) {
// ������filter;
JFileChooser fileChooser = new JFileChooser();
// fileChooser.addChoosableFileFilter(new
// myFilter("*.txt","Files(*.txt)"));
fileChooser.addChoosableFileFilter(fileChooser.getFileFilter());
if (fileChooser.APPROVE_OPTION != fileChooser.showOpenDialog(this))
return;
// �������ļ���
BufferedReader dataIn = null;
try {
dataIn = new BufferedReader(new FileReader(fileChooser
.getSelectedFile().getPath()));
String c = null;
do {
c = dataIn.readLine();
if (c != null)
fileArea.append(c + "\n");
} while (c != null);
} catch (Exception ex) {
System.out.println("Catch exception:" + ex.toString());
}
}

public void exit() {
if (isChange == false)
System.exit(1);
else {
int decision = JOptionPane.showConfirmDialog(this,
"The File has Change.\n"
+ "Do you want to save the change?", "Notepad",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE);
if (decision == JOptionPane.YES_OPTION) {
// �����ǽ��ļ�д������!
try {
JFileChooser fileSave = new JFileChooser();
fileSave.setDialogTitle("�����ļ�");
// fileSave.addChoosableFileFilter(new
// myFilter("*.txt","Files(*.txt)"));
fileSave.addChoosableFileFilter(fileSave.getFileFilter());
if (fileSave.APPROVE_OPTION != fileSave
.showSaveDialog(this))
return;
BufferedWriter dataOut = new BufferedWriter(
new BufferedWriter(new FileWriter(fileSave
.getSelectedFile())));
String c = null;
isChange = false;
do {
String str = fileArea.getText();
dataOut.write(str);
dataOut.close();
} while (c != null);
} catch (Exception e2) {
System.out.println("Catch exception:���!" + e2.toString());
}
} else if (decision == JOptionPane.NO_OPTION)
System.exit(1);
else if (decision == JOptionPane.CANCEL_OPTION)
;
;
}
// innerclass.fileSave_actionPerformed();
}

public void fileSave_actionPerformed(ActionEvent e1) {

// �����ǽ��ļ�д������!
try {
JFileChooser fileSave = new JFileChooser();
fileSave.setDialogTitle("�����ļ�");
// fileSave.addChoosableFileFilter(new
// myFilter("*.txt","Files(*.txt)"));
fileSave.addChoosableFileFilter(fileSave.getFileFilter());
if (fileSave.APPROVE_OPTION != fileSave.showSaveDialog(this))
return;
BufferedWriter dataOut = new BufferedWriter(new BufferedWriter(
new FileWriter(fileSave.getSelectedFile() + ".txt")));
// RandomAccessFile dataOut=new
// RandomAccessFile(fileSave.getSelectedFile(),"rw");
String c = null;
isChange = false;
do {
String str = fileArea.getText();
dataOut.write(str);
dataOut.close();
} while (c != null);
} catch (Exception e2) {
System.out.println("Catch exception:���!" + e2.toString());
}
}

public static void main(String arg[]) {
//new MyUIManager();
Note nt = new Note();
JLookAndFeelMenu menu = new JLookAndFeelMenu(nt);
nt.menuBar.add(menu);
nt.show();
}

public void fileCut_actionPerformed(ActionEvent e) {
fileArea.cut();
}

public void filePaste_actionPerformed(ActionEvent e) {
fileArea.paste();
}

public void fileColor_actionPerformed(ActionEvent e) {
JColorChooser fileColor = new JColorChooser();
// fileArea.setForeground(fileColor.showDialog(this,"��ɫ",Color.red));
// fileArea.setSelectionColor(fileColor.showDialog(this,"��ɫ",Color.red));
fileArea.setSelectionColor(fileColor
.showDialog(this, "��ɫ", Color.black));
}
}

首先是功能划分!
就是你要实现什么功能!
就拿windowsxp的notepad说,功能就那几个!
实现的功能划分出来就开始界面设计了!设计成什么样的,
菜单有哪些,怎么布局,这就开始设计界面部分了!
然后就开始代码,代码首先是写出界面!
然后添加相应的事件!
然后调试bug,这样一个记事本就完成了!

把java swing,io包熟悉下 然后可以先把界面做出来 再实现功能

首先你分析 你想写的记事本的功能是怎么样的
根据你的需求设计界面
核心当然是文件流的操作啦

没学过JAVA,应该跟别的编程语言差不多吧?

一步步教你如何配置Java环境变量(超级详细)!
答:踏上Java编程之旅 如果你对JavaSE有一定基础,且渴望进一步提升,那么一套深入浅出的JavaWeb教程将是你不可或缺的伙伴。它将带你从入门到实战,让你掌握MySQL数据库开发,HTML5、CSS3等前端技术,以及Servlet、JSP等Java web技术。一步步提升你的Java web开发能力,开启你的编程新篇章!

零基础小白如何着手学习JAVA开发
答:所以说学习一门专业不严盲目,每一门专业都不简单,学习Java同样也是一样,下面我来给你说一下这篇文章——里面是以视频为内容的学习线路图,分开讲述啦我们需要如何学习Java编程语言。或者从网上寻找其他的,相关于Java编程的课程等等,打好我们的基础为培训做准备;...

java最基础网络编程
答:看看文档就解决了 InputStream java.net.Socket.getInputStream()throws IOException Returns an input stream for this socket.If this socket has an associated channel then the resulting input stream delegates all of its operations to the channel. If the channel is in non-blocking mode then...

小白求教:想自己编出一个安卓的计算器app要学什么
答:入门书籍推荐郭霖大神的《第一行代码》通过打怪升级方式一步步了解Android世界 重点需要掌握:UI布局 网页链接 四大组件网页链接 数据存储技术 一些常用的Android 可以参考 网页链接 3、针对你的这个计算需求 基本java语法,UI布局、Activity使用 这些技术点 就够了 最后给个相关的计算机实现的参考链接 网页...

JAVA 冒泡排序法的详细解释;一步步的哈;
答:public class F { public static void main (String args[]) { // 要排序的数组 int x[]={10,51,4,65,23,8};// 设置临时变量,方便后面进行数值交换 int temp;// 开始循环比较每一个值 for(int i=1;i<x.length;i++){ // 每一个值都与他后面的值相比,因为在他前面的都是比他...

请教一下java循环语句
答:这个没有什么原理,按照顺序来一步步看就好了,第一个循环,一开始number=1,进入循环,number<=3成立,然后就是关键的下面执行的情况System.out.println(number + number++ );这里可能是造成困惑的最大地方,这里你要注意,之前的这里首先number=1,后面有个number++这里的number++是个表达式,结果是返回...

不同基础转行Java,分别该怎么学习?
答:1、Java基础 首先去找一个Java的基础教程学一下,学习Java基础的时候,应该尽量多动手,很多时候,你想当然的事情,等你写出来运行一下,你就会发现不是这么回事儿,不信你就试试。 学完以上内容以后,你应该对Java有一个基本的了解了,你可以用Java语言写出一些简单的程序,并且你用的是最简单的编辑器,比如记事本。 这个...

用eclipse编写Java程序时怎样生成apk文件?
答:或者 B.选中项目,右键=》Andoid Tools=》Export Signed Application Package,后面一步步的去做,这是签过名的。至于什么是APK签名呢?其实APK签名用处主要有两种:1. 使用特殊的key签名可以获取到一些不同的权限。2. APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,...

电脑菜鸟,如何一步步的学习java?
答:sun已经被oracle收购的,但JAVA相关的东西基本上还是没有多大变化的~!下面是安装步骤,希望对你有帮助~!第一步:安装jdk,下载地址:第二步:右击“我的电脑”属性,选择“高级”选项卡,单击“环境变量”,第三步:假设JDK的安装路径:E:\jdk 在用户变量中添加下面的变量和属性值 Classpath .;E...

怎么在JAVA编程中实现两次的switch语句
答:我猜想,你现在不是遇到 switch里面再放一个switch 而是 你怎么一步步的向下 进行 对吧 也就是说 你是再想怎么 才能 选择了switch中的1后再选择1中的内容 比如 客户信息 或者是购物结算 等等 对吧 我给你的意见是:将System.out.println("1.客户信息管理");等等换成一个个的方法,具体...