- 浏览: 18837 次
- 性别:
- 来自: 中山
最新评论
import java.awt.BorderLayout;
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 java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
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.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;
public class Notepad extends JFrame{
JMenuItem newFile,open,save,saveAs,exit;
JMenuItem revocation,cut,copy,paste,delete,find,findNext,replace,date;
JMenuItem script;
JMenuItem zhuangTai;
JMenuItem zhuTi,helpZhuTi;
JTextArea jta;
JScrollPane jsp;
JFileChooser fileChooser;
JPopupMenu popUpMenu;
JButton jb,jb1;
JTextField jt,jt1;
JLabel stateBar;
int i = 0;
int u = 0;
//构造方法
public Notepad() {
super("新建文本文件");
this.setLocation(300,150);
this.setSize(600,500);
myFrame();
this.setVisible(true);
}
public void myFrame() {
//文本编辑区域
jta = new JTextArea();
jta.setFont(new Font("宋体",Font.PLAIN,16)); //设置默认字体
jta.setLineWrap(true);
jta.setDragEnabled(true);
jsp = new JScrollPane(jta);
fileChooser = new JFileChooser();
JMenuBar jmb = new JMenuBar();
JMenu file = new JMenu("文件(F)");
JMenu edit = new JMenu("编辑(E)");
JMenu form = new JMenu("格式(O)");
JMenu check = new JMenu("查看(V)");
JMenu help = new JMenu("帮助(H)");
newFile = new JMenuItem("新建(N) Ctrl+N");
open = new JMenuItem("打开(O) Ctrl+O");
//设置快捷键
open.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_O,
InputEvent.CTRL_MASK));
save = new JMenuItem("保存(S) Ctrl+S");
save.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_S,
InputEvent.CTRL_MASK));
saveAs = new JMenuItem("另存为(A)...");
exit = new JMenuItem("退出(Q)");
exit.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_Q,
InputEvent.CTRL_MASK));
newFile.addActionListener( //新建文件
new ActionListener() {
public void actionPerformed(ActionEvent e) {
newFiles();
}
});
exit.addActionListener( //退出选项事件
new ActionListener() {
public void actionPerformed(ActionEvent e) {
closeFile();
}
});
save.addActionListener( //保存事件
new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveFile();
}
});
saveAs.addActionListener( //另存为事件
new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveFileAs();
}
});
open.addActionListener( //打开事件
new ActionListener() {
public void actionPerformed(ActionEvent e) {
openFile();
}
});
file.add(newFile);
file.add(open);
file.add(save);
file.add(saveAs);
file.addSeparator(); // 设置横线
file.add(exit);
revocation = new JMenuItem("撤销");
revocation.setEnabled(false);
cut = new JMenuItem("剪切");
cut.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_X,
InputEvent.CTRL_MASK));
copy = new JMenuItem("复制");
copy.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_C,
InputEvent.CTRL_MASK));
paste = new JMenuItem("黏贴");
paste.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_V,
InputEvent.CTRL_MASK));
delete = new JMenuItem("删除");
find = new JMenuItem("查找");
find.setAccelerator(
KeyStroke.getKeyStroke(
KeyEvent.VK_F,
InputEvent.CTRL_MASK));
findNext = new JMenuItem("查找下一个");
replace = new JMenuItem("替换");
date = new JMenuItem("时间/日期");
findNext.setEnabled(false);
replace.setEnabled(false);
cut.addActionListener( //剪切事件
new ActionListener() {
public void actionPerformed(ActionEvent e) {
cut();
}
});
copy.addActionListener( //copy事件
new ActionListener() {
public void actionPerformed(ActionEvent e) {
copy();
}
});
paste.addActionListener( //黏贴事件
new ActionListener() {
public void actionPerformed(ActionEvent e) {
paste();
}
});
delete.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
jta.setText("");
}
});
date.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
nowDate();
}
});
find.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
onFind();
}
});
edit.add(revocation);
edit.addSeparator();
edit.add(cut);
edit.add(copy);
edit.add(paste);
edit.add(delete);
edit.addSeparator();
edit.add(find);
edit.add(findNext);
edit.add(replace);
edit.addSeparator();
edit.add(date);
// 编辑区键盘事件
jta.addKeyListener(
new KeyAdapter() {
public void keyTyped(KeyEvent e) {
processTextArea();
}
}
);
// 编辑区鼠标事件
jta.addMouseListener(
new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON3)
popUpMenu.show(jta, e.getX(), e.getY());
}
public void mouseClicked(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON1)
popUpMenu.setVisible(false);
}
}
);
script = new JMenuItem("字体");
script.setEnabled(false);
form.add(script);
zhuangTai = new JMenuItem("状态栏");
zhuangTai.setEnabled(false);
check.add(zhuangTai);
zhuTi = new JMenuItem("帮助主题");
zhuTi.setEnabled(false);
helpZhuTi = new JMenuItem("关于主题");
help.add(zhuTi);
help.addSeparator();
help.add(helpZhuTi);
helpZhuTi.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
zhuTi();
}
});
jmb.add(file);
jmb.add(edit);
jmb.add(form);
jmb.add(check);
jmb.add(help);
// 状态栏
stateBar = new JLabel("未修改");
stateBar.setHorizontalAlignment(SwingConstants.RIGHT);
stateBar.setBorder(
BorderFactory.createEtchedBorder());
popUpMenu = edit.getPopupMenu();
this.setLayout(new BorderLayout());
this.add(jmb,BorderLayout.NORTH);
this.add(jsp,BorderLayout.CENTER);
this.add(stateBar, BorderLayout.SOUTH);
this.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
closeFile();
}
}
);
}
//退出
private void closeFile() {
// 是否已保存文件
if(!isCurrentFileSaved()) {
// 释放窗口资源,而后关闭程序
System.exit(1);
}
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:
System.exit(1);
}
}
}
//新建文件
private void newFiles() {
if(isCurrentFileSaved()) {
saveFile();
}
stateBar.setText("未修改");
jta.setText("");
}
//保存`
private void saveFile() {
//从标题栏取得文件名
File file = new File(getTitle());
//若指定文件不存在
if(!file.exists()) {
saveFileAs();
} else {
try {
BufferedWriter buf = new BufferedWriter(new FileWriter(file));
buf.write(jta.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 ff = fileChooser.getSelectedFile();
//在标题栏上设定文件名称
setTitle(ff.toString());
try {
ff.createNewFile();
saveFile();
} catch (IOException e) {
JOptionPane.showMessageDialog(null, e.toString(),
"无法新建文件",JOptionPane.ERROR_MESSAGE);
}
}
}
//检查文件是否修改
private boolean isCurrentFileSaved() {
if(stateBar.getText().equals("未修改")) {
return false;
}
else {
return true;
}
}
//打开文件
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 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());
// 清除前一次文件
jta.setText("");
// 设定状态栏
stateBar.setText("未修改");
// 取得系统相依的换行字符
String lineSeparator = System.getProperty("line.separator");
// 读取文件并附加至文字编辑区
String text;
while((text = buf.readLine()) != null) {
jta.append(text);
jta.append(lineSeparator);
}
buf.close();
}
catch(IOException e) {
JOptionPane.showMessageDialog(null, e.toString(),
"开启文件失败", JOptionPane.ERROR_MESSAGE);
}
}
}
//设置日期
private void nowDate() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
jta.append(sdf.format(new Date()));
}
private void cut() {
jta.cut();
stateBar.setText("已修改");
popUpMenu.setVisible(false);
}
private void copy() {
jta.copy();
popUpMenu.setVisible(false);
}
private void paste() {
jta.paste();
stateBar.setText("已修改");
popUpMenu.setVisible(false);
}
private void processTextArea() {
stateBar.setText("已修改");
}
private void onFind() {
//查找替换对话框
JDialog jd = new JDialog();
jd.setTitle("查找/替换");
JLabel jl1 = new JLabel("查找:");
jl1.setBounds(34,10,30,20);
JLabel jl2 = new JLabel("替换内容:");
jl2.setBounds(10,40,80,20);
jt = new JTextField(10);
jt.setBounds(85,10,105,20);
jt1 = new JTextField(10);
jt1.setBounds(85,40,105,20);
jb = new JButton("查找下一个");
jb.setBounds(220,10,100,20);
jb1 = new JButton("逐个替换");
jb1.setBounds(220,40,100,20);
jd.setLayout(null);
jd.setBounds(500,300,350,150);
jd.add(jl1);
jd.add(jl2);
jd.add(jt);
jd.add(jt);
jd.add(jt1);
jd.add(jb);
jd.add(jb1);
jd.setVisible(true);
jd.setResizable(false);
//事件管理
jb.addActionListener(new ActionListener(){ //查找功能
public void actionPerformed(ActionEvent e) {
String s=jt.getText();
int x = jta.getText().indexOf(s,i);
if (x == -1) {
JOptionPane.showMessageDialog(null, "没找到 " + s);
i = 0;
} else {
jta.setSelectionStart(x);
jta.setSelectionEnd(x + s.length());
i = x + 1;
}
}
});
jb1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String s=jt.getText();
String s1=jt1.getText();
int x = jta.getText().indexOf(s, u);
if (x == -1) {
JOptionPane.showMessageDialog(null, "没找到 " + s);
u = 0;
} else {
jta.setSelectionStart(x);
jta.setSelectionEnd(x + s.length());
jta.replaceSelection(s1);
jta.setSelectionStart(jta.getSelectionEnd()-s1.length());
jta.setSelectionEnd(jta.getSelectionEnd());
u = x + 1;
}
}
});
}
//主题
private void zhuTi() {
JOptionPane.showMessageDialog(null, "该记事本是由xxx");
}
//主函数
public static void main(String[] args) {
new Notepad();
}
}
相关推荐
在描述中提到,这个项目已经实现了记事本大约95%的功能,但有几点未完成,如位置存取、读写注册表、右键菜单汉化以及调用记事本帮助功能。 1. **Qt基础:** - **QApplication**:这是所有Qt应用程序的起点,负责...
【标题】"记事本代码-Java课程设计"是一个典型的Java编程项目,旨在让学生通过实践掌握Java编程语言的基础以及高级特性。在这个项目中,学生通常会构建一个类似于Windows系统中的“记事本”应用程序,具备基本的文字...
描述中提到“部分原代码”,这可能意味着开发者已经完成了部分功能,但还有一部分代码没有完成或者存在错误。常见的问题可能涉及到以下几点: 1. **事件处理**:在C#中,用户界面的交互通常通过事件驱动。例如,...
VB.NET是Microsoft .NET框架的一部分,是一个面向对象的编程环境,适合开发桌面应用程序,如我们的简易记事本。 记事本程序是一个基础但实用的文本编辑器,它允许用户创建、打开和编辑纯文本文件。在VB.NET中实现...
2. **构建菜单栏**:菜单栏是记事本程序的重要组成部分之一,用于提供各种功能选项。 - 创建一个`JMenuBar`实例并将其设置为主窗口的菜单栏; - 添加四个菜单项:文件、编辑、工具、帮助; - 每个菜单项下面都...
“交作业分数还不错哦~”暗示这可能是作者完成课程作业的一部分,并且获得了较好的评价,意味着代码质量相对较高,遵循了良好的编程规范,且功能实现得较为完善。 从标签" C# "和" 记事本 "来看,我们可以深入探讨...
这种视觉区分有助于快速定位代码中的关键部分,识别语法错误,或者在大量代码中找到特定的语句。 【压缩包子文件的文件名称列表】: "Notepad" 可能表示的是这个记事本程序的主程序文件,可能是一个可执行文件或源...
虽然基础功能已实现,但还存在一些未完成的部分,比如事件监听器的注册和部分UI元素的功能实现。为了完善这个应用程序,开发者需要进一步添加和调试这些功能,以确保所有预期的操作都能正常工作。
源码中的窗体布局、控件属性设置等都是通过这些工具完成的,同时也涉及代码编写来调整细节。 6. 文本处理: 记事本还需要处理文本选中、复制、粘贴、查找替换等功能,这些通常通过操作字符串和文本范围实现。C#...
【标题】"Java 记事本 源...同时,由于部分功能未完善,它也为有经验的开发者提供了一个改进和扩展代码的机会。通过阅读和理解这段代码,可以深入理解Java Swing或JavaFX库的用法,以及如何实现窗口管理和文本操作。
例如,用户在手机上开始写笔记,切换到平板电脑时,可以继续未完成的内容。 9. **测试与调试**: 使用DevEco Studio的模拟器或真实设备进行应用测试,可以检查记事本在不同屏幕尺寸和操作场景下的表现,确保功能...
在资源共享方面,"酷炫记事本"具备云同步功能,用户可以在不同的设备上无缝切换,继续未完成的工作。更重要的是,它支持直接分享代码片段,可以通过链接或嵌入代码的方式,方便地与团队成员或在线社区进行交流。这一...
- **代码优化**:代码中存在一些未完成或未优化的部分,例如某些方法或变量的声明后并未给出具体实现,这可能需要进一步完善。 - **BUG修复**:根据描述提到的小BUG,需要对代码进行仔细检查并修复,以确保程序的...
自动完成能够根据已输入的部分代码提供可能的补全选项,节省输入时间。而代码片段则允许程序员保存常用代码块,如循环、条件语句等,以便快速插入到当前项目中。 安全性是另一个重要方面。"绝对安全"的标签暗示了这...
事件处理是记事本程序的核心部分,它使得用户可以与界面进行交互。例如,当用户点击"打开"或"保存"菜单项时,程序会监听这些事件并执行相应的操作。这通常通过实现`ActionListener`接口并在`actionPerformed`方法中...
6. **异常处理**: 为了提高程序的健壮性,开发者会在关键代码段添加异常处理机制,如try-catch-finally语句块,以捕获和处理可能出现的错误,如文件未找到、权限问题等。 7. **多线程编程**: 虽然记事本小程序一般...
标题 "java实现记事本程序源代码" 描述的是一个使用Java编程语言开发的记事本应用程序,这个程序具备基础的文本编辑功能,如复制和剪贴等,非常适合初学者学习和实践。开发者希望通过这个项目鼓励新手程序员进行探索...
综上所述,这段代码主要展示了如何使用 Java Swing 构建一个简单的记事本程序,包括创建 GUI 界面、实现基本的文件读写操作以及响应用户事件。尽管代码中存在一些不完整的部分,但它仍然是学习 Java Swing 和文件...
对于长代码或复杂的结构,EditPlus允许用户折叠代码块,隐藏不重要的部分,使工作区保持整洁,便于聚焦于关键代码。 3. **自动完成**: 提供代码自动完成功能,当用户输入特定关键字或符号时,EditPlus会列出可能...
为了保存用户在记事本中所做的修改,我们需要监听`FormClosing`事件,并在该事件中检查是否有未保存的更改,如果有的话,提示用户保存。 总的来说,创建一个全面功能的C#记事本项目,不仅可以帮助初学者熟悉面向...