/**
* Copyright 2009 ChinaSoft International Ltd. All rights reserved.
*/
package com.chinasofti.notebook;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.swing.event.*;
import javax.print.*;
import javax.print.attribute.*;
import java.util.*;
import java.text.*;
/**
* MyNotebook 示例
*
* @author Martin
* @version 1.0 2009-10-30
*/
public class MyNotebook extends JFrame implements ActionListener {
Container con;
JScrollPane JSPane;
JTextArea text;
JMenuBar mainMenuBar;
JMenu fileMenu, editMenu, formatMenu, helpMenu;
JMenuItem newItem, openItem, saveItem, saveasItem, pageItem, printItem, exitItem;
JMenuItem undoItem, cutItem, copyItem, pasteItem, findItem, replaceItem, selectallItem, dateItem;
JCheckBoxMenuItem wrapItem;
JMenuItem fontItem;
JMenuItem helpItem, aboutItem;
boolean changed = false;
boolean haveName = false;
File file = null;
//主程序入口
public static void main(String[] args) {
MyNotebook notbook = new MyNotebook();
notbook.setVisible(true);
}
//创建界面、安装各种监听器、
public MyNotebook() {
setTitle("记事本 -- 未命名");
con = getContentPane();
text = new JTextArea();
JSPane = new JScrollPane(text);
createMenu();
setJMenuBar(mainMenuBar);
con.add(JSPane, BorderLayout.CENTER);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width - 800) / 2, (screenSize.height - 600) / 2, 800, 600);
}
//创建主菜单
public void createMenu() {
//创建JMenuBar
mainMenuBar = new JMenuBar();
//创建四个JMenu
fileMenu = new JMenu("文件");
editMenu = new JMenu("编辑");
formatMenu = new JMenu("格式");
helpMenu = new JMenu("帮助");
//创建JMenuItem并添加到对应的JMenu中
mainMenuBar.add(fileMenu);
newItem = new JMenuItem("新建");
openItem = new JMenuItem("打开..");
saveItem = new JMenuItem("保存..");
saveasItem = new JMenuItem("另存为..");
pageItem = new JMenuItem("页面设置..");
printItem = new JMenuItem("打印..");
exitItem = new JMenuItem("退出");
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(saveasItem);
fileMenu.addSeparator();
fileMenu.add(pageItem);
fileMenu.add(printItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
mainMenuBar.add(helpMenu);
helpItem = new JMenuItem("帮助主题");
aboutItem = new JMenuItem("关于..");
helpMenu.add(helpItem);
helpMenu.add(aboutItem);
exitItem.addActionListener(this);
saveItem.addActionListener(this);
saveasItem.addActionListener(this);
newItem.addActionListener(this);
printItem.addActionListener(this);
openItem.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
Object obj;
obj = e.getSource();
if (obj == exitItem) {
doExit();
} else if (obj == saveItem) {
doSave();
} else if (obj == saveasItem) {
doSaveAs();
} else if (obj == newItem) {
doNewFile();
} else if (obj == openItem) {
doOpen();
}
}
//当用户按下窗口的“关闭”时,会自动调用此方法
protected void processWindowEvent(WindowEvent e) {
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
doExit();
}
}
//程序退出时的代码
void doExit() {
int select;
if (!changed) {
System.exit(0);
} else {
select = JOptionPane.showConfirmDialog(this, "文件修改后尚未存盘,要保存吗?");
switch (select) {
case JOptionPane.YES_OPTION:
select = doSave();
if (select == 1) {
System.exit(0);
}
break;
case JOptionPane.NO_OPTION:
System.exit(0);
break;
case JOptionPane.CANCEL_OPTION:
break;
}
}
}
//保存用户编辑的文件,保存成功返回1,否则返回0
int doSave() {
FileOutputStream fout;
byte content[];
int flag;
if (!haveName) {
flag = doSaveAs();
} else if (changed) {
try {
fout = new FileOutputStream(file);
content = text.getText().getBytes();
fout.write(content);
fout.close();
changed = false;
JOptionPane.showMessageDialog(this, "保存成功!");
flag = 1;
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(this, "指定的文件名称或属性有问题!");
flag = 0;
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "无法写文件,请检查文件是否被锁定");
flag = 0;
}
} else {
JOptionPane.showMessageDialog(this, "保存成功,其他情况!");
flag = 1;
}
return flag;
}
//用"另存为"对话框保存文件。保存成功返回1,否则返回0
int doSaveAs() {
FileOutputStream fout;
byte content[];
int flag = 0;
File tmpfile = null;
ExampleFileFilter filter = new ExampleFileFilter();
JFileChooser chooser;
filter.addExtension("txt");
filter.setDescription("文本文件");
if (file != null) {
chooser = new JFileChooser(file.getPath());
} else {
chooser = new JFileChooser();
}
chooser.setFileFilter(filter);
flag = chooser.showSaveDialog(this);
if (flag == JFileChooser.APPROVE_OPTION) {
tmpfile = chooser.getSelectedFile();
if (tmpfile.exists()) {
if (JOptionPane.showConfirmDialog(this, "文件已经存在,是否覆盖?",
"警告", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
flag = 1;
} else {
flag = 0;
}
} else {
flag = 1;
}
} else {
flag = 0;
}
if (flag == 1) {//用户已经确定要以指定名称保存文件
try {
fout = new FileOutputStream(tmpfile);
content = text.getText().getBytes();
fout.write(content);
fout.close();
flag = 1;
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(this, "指定的文件名称或属性有问题!");
flag = 0;
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "无法写文件,请检查文件是否被锁定");
flag = 0;
}
}
if (flag == 1) {//文件保存成功,修改相关变量
changed = false;
haveName = true;
file = tmpfile;
this.setTitle(file.getName() + " - 记事本");
}
return flag;
}
//新建一个文件
void doNewFile() {
int select, flag;
if (changed) {
select = JOptionPane.showConfirmDialog(this, "文件修改后尚未存盘,要保存吗?");
switch (select) {
case JOptionPane.YES_OPTION:
flag = doSave();
break;
case JOptionPane.NO_OPTION:
flag = 1;
break;
default:
flag = 0;
break;
}
} else {
flag = 1;
}
if (flag == 1) {
changed = false;
haveName = false;
setTitle("记事本 -- 未命名");
text.setText(null);
基于Java的Notebook源码Java记事本源码
需积分: 0 119 浏览量
更新于2023-06-07
收藏 14KB RAR 举报
在IT领域,编程是核心技能之一,而Java作为广泛应用的编程语言,被广泛用于开发各种类型的应用程序,包括我们常见的桌面应用。这个“基于Java的Notebook源码Java记事本源码”就是一个很好的学习资源,它可以帮助我们深入理解Java编程在创建简单桌面应用程序时的应用。
1. **Java基础知识**:
- **类与对象**:Java是一种面向对象的语言,Notebook记事本的实现必然涉及到类的设计和对象的实例化。每个功能,如打开、保存、编辑等,都可能对应一个独立的类。
- **GUI(图形用户界面)**:Java提供了Swing和JavaFX库来创建图形用户界面。在这个Notebook源码中,可能使用了JFrame、JPanel、JButton、JTextArea等组件来构建记事本的界面。
2. **Swing组件**:
- **JFrame**:这是Java Swing中的顶级容器,用作应用程序的窗口。
- **JPanel**:用于添加其他组件,如按钮、文本区域等,可以进行布局管理。
- **JButton**:表示可点击的按钮,如“新建”、“打开”、“保存”等操作。
- **JTextArea**:用于显示和编辑文本,是记事本的主要部分。
3. **事件处理**:
- **监听器**:Java GUI中的事件驱动模型需要为按钮等组件添加监听器,例如ActionListener,来响应用户的点击事件。
4. **文件I/O操作**:
- **java.io包**:Java的I/O流用于读写文件,记事本的“保存”和“打开”功能会涉及File、FileReader、FileWriter、BufferedReader、BufferedWriter等类。
5. **文本处理**:
- **String与StringBuilder**:在编辑文本时,可能会用到这些类来处理和操作文本内容。
6. **布局管理**:
- **BorderLayout、GridLayout、FlowLayout**等:Java Swing提供多种布局管理器,用于控制组件在窗口中的位置和大小。
7. **异常处理**:
- 在进行文件操作时,必须考虑可能出现的异常,如FileNotFoundException、IOException等,并进行适当的处理。
8. **多线程**:
- 在某些复杂应用中,可能使用多线程技术,例如在保存大文件时,可以开启新线程以避免阻塞用户界面。
通过研究这个Notebook源码,开发者可以学习到如何用Java实现一个简单的桌面应用,了解如何组织代码,如何设计类结构,以及如何处理用户交互。这对于提升Java编程技能,特别是对于新手来说,是非常有价值的实践项目。同时,这也是一个良好的起点,可以在此基础上进一步扩展功能,比如添加查找替换、文本格式化、拼写检查等特性。

F_D_D_1
- 粉丝: 3
最新资源
- lz4-java-1.4.jar中文文档.zip
- lz4-java-1.5.1.jar中文文档.zip
- rocksdbjni-9.10.0.jar中文文档.zip
- spring-ai-template-st-1.0.0-M8.jar中文文档.zip
- spring-ai-test-0.8.0.jar中文文档.zip
- spring-ai-test-1.0.0-M5.jar中文文档.zip
- spring-ai-test-1.0.0-M8.jar中文文档.zip
- spring-ai-test-1.0.0-RC1.jar中文文档.zip
- spring-ai-template-st-1.0.0.jar中文文档.zip
- javaagent-1.1.0.jar中文文档.zip
- javaagent-1.1.1.jar中文文档.zip
- lz4-java-1.7.0.jar中文文档.zip
- javaagent-1.1.2.jar中文文档.zip
- javaagent-1.1.3.jar中文文档.zip
- javaagent-1.1.5.jar中文文档.zip
- spring-jdbc-6.2.0.jar中文文档.zip