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();
}
}
记事本代码(部分未完成)
最新推荐文章于 2024-09-01 15:30:33 发布