📄 bookeditor.java
字号:
saveFile(); //调用保存方法
Text.setText("");
this.setTitle("新建文本");
statusLabel.setText(" 新建文本");
}
}
else if (saveChoose == JOptionPane.NO_OPTION) {
System.exit(0);
}
else Text.requestFocus();
}
else
System.exit(0);
}
public void checkMenuItemEnabled() { //定义方法设置剪切、复制、粘贴等功能键的可用性
String selectText = Text.getSelectedText();
if (selectText == null) { //剪切,复制功能可用性判断
mEdit_Cut.setEnabled(false);
rightclickMenu_Cut.setEnabled(false);
mEdit_Copy.setEnabled(false);
rightclickMenu_Copy.setEnabled(false);
} else {
mEdit_Cut.setEnabled(true);
rightclickMenu_Cut.setEnabled(true);
mEdit_Copy.setEnabled(true);
rightclickMenu_Copy.setEnabled(true);
rightclickMenu_Delete.setEnabled(true);
}
// 粘贴功能可用性判断
Transferable contents = clipBoard.getContents(this);
if (contents == null) {
mEdit_Paste.setEnabled(false);
rightclickMenu_Paste.setEnabled(false);
} else {
mEdit_Paste.setEnabled(true);
rightclickMenu_Paste.setEnabled(true);
}
}
public void saveFile() { //保存当前文本,并导出相应文件
try {
FileWriter fw = new FileWriter(saveFileName); //根据获取的文件对象新建文件
fw.write(Text.getText()); //向新建的文件写入文本框的内容
fw.close(); //关闭记录集
} catch (Exception e) {}
}
public void searchAndreplace() { //查找与替换方法
final JDialog findDialog = new JDialog(this, "查找与替换", true);
Container con = findDialog.getContentPane();
con.setLayout(new FlowLayout(FlowLayout.LEFT));
JLabel searchContentLabel = new JLabel("查找内容 :");
JLabel replaceContentLabel = new JLabel("替换内容 :");
final JTextField findText = new JTextField(22);
final JTextField replaceText = new JTextField(22);
final JCheckBox matchcase = new JCheckBox("区分大小写");
JButton searchNext = new JButton("查找下一个");
JButton replace = new JButton("替换");
JButton replaceAll = new JButton("全部替换");
searchNext.setPreferredSize(new Dimension(130, 22)); //设置按键的大小
replace.setPreferredSize(new Dimension(130, 22));
replaceAll.setPreferredSize(new Dimension(130, 22));
// "替换"按钮的事件处理
replace.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (replaceText.getText().length() == 0 && Text.getSelectedText() != null)
Text.replaceSelection("");
if (replaceText.getText().length() > 0 && Text.getSelectedText() != null)
Text.replaceSelection(replaceText.getText());
}
});
// "替换全部"按钮的事件处理
replaceAll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Text.setCaretPosition(0); // 将光标放到编辑区开头
int a = 0, replaceCount = 0; //定义查找内容位置记录集及查找到相同内容的次数记录集
if (findText.getText().length() == 0) {
JOptionPane.showMessageDialog(findDialog, "请填写查找内容!", "提示", JOptionPane.WARNING_MESSAGE);
findText.requestFocus(true);
return;
}
while (a > -1) { //替换全部的循环操作控制,当搜索结果为空时停止
int FindStartPos = Text.getCaretPosition(); //获取每次搜索前的光标位置
String strA, strB; //定义记录集分别记录文本内容及搜索内容
if (matchcase.isSelected()) { //判断大小写敏感搜索选择
strA = Text.getText();
strB = findText.getText();
}
else {
strA = Text.getText().toLowerCase(); //若选择大小写不敏感,则使用全部记录小写再搜索的办法
strB = findText.getText().toLowerCase();
}
if (Text.getSelectedText() == null) {
a = strA.indexOf(strB, FindStartPos); //利用indexOf查找与搜索内容匹配的字符串的位置
}
else { //如果文本不存在查找内容则返回-1
a = strA.indexOf(strB, FindStartPos - findText.getText().length() + 1);
}
if (a > -1) {
Text.setCaretPosition(a); //当返回搜索内容位置时在原文中选中它
Text.select(a, a + findText.getText().length());
}
else {
if (replaceCount == 0) {
JOptionPane.showMessageDialog(findDialog, "找不到您查找的内容!", "记事本", JOptionPane.INFORMATION_MESSAGE);
}
else {
JOptionPane.showMessageDialog(findDialog, "成功替换" + replaceCount + "个匹配内容!", "替换成功", JOptionPane.INFORMATION_MESSAGE);
}
}
if (replaceText.getText().length() == 0 && Text.getSelectedText() != null) {
Text.replaceSelection(""); //若替换内容为空则是选中内容变为空
replaceCount++;
}
if (replaceText.getText().length() > 0 && Text.getSelectedText() != null) {
Text.replaceSelection(replaceText.getText()); //替换选中内容
replaceCount++;
}
}
}
});
// "查找下一个"按钮事件处理
searchNext.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int a = 0; //定义查找内容位置记录集
int FindStartPos = Text.getCaretPosition(); //获取每次搜索前的光标位置
String strA, strB; //定义记录集分别记录文本内容及搜索内容
if (matchcase.isSelected()) { //判断大小写敏感搜索选择
strA = Text.getText();
strB = findText.getText();
} else {
strA = Text.getText().toLowerCase(); //若选择大小写不敏感,则使用全部记录小写再搜索的办法
strB = findText.getText().toLowerCase();
}
if (Text.getSelectedText() == null) {
a = strA.indexOf(strB, FindStartPos); //利用indexOf查找与搜索内容匹配的字符串的位置
}
else {
a = strA.indexOf(strB, FindStartPos - findText.getText().length() + 1);
}
if (a > -1) {
Text.setCaretPosition(a); //当返回搜索内容位置时在原文中选中它
Text.select(a, a + findText.getText().length());
}
else {
JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "记事本", JOptionPane.INFORMATION_MESSAGE);
}
}
});
JButton back = new JButton("返回"); // "返回"按钮及事件处理,使用时消除该对话框
back.setPreferredSize(new Dimension(86, 22));
back.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
findDialog.dispose(); //dispose将该对话框操作所使用内存返回,并使对话框不可显示
}
});
// 创建"查找与替换"对话框的界面
JPanel bottomPanel = new JPanel(); //定义各控件排版容器
JPanel centerPanel = new JPanel();
JPanel topPanel = new JPanel();
topPanel.add(searchContentLabel); //在各个容器中添加控件
topPanel.add(findText);
topPanel.add(matchcase);
centerPanel.add(replaceContentLabel);
centerPanel.add(replaceText);
centerPanel.add(back);
bottomPanel.add(searchNext);
bottomPanel.add(replace);
bottomPanel.add(replaceAll);
con.add(topPanel); //添加并设置各控件排版容器顺序
con.add(centerPanel);
con.add(bottomPanel);
// 设置"查找与替换"对话框属性
findDialog.setSize(430, 160); //设置对话框大小
findDialog.setResizable(false); //设置对话框为大小不可变
findDialog.setLocation(200, 200); //设置显示时的屏幕初始位置坐标
findDialog.setVisible(true); //设置对话框为可见
}
public void actionPerformed(ActionEvent e) {
// 新建
if (e.getActionCommand().equals("新建(N)")){
Text.requestFocus();
if (!Text.getText().equals(oldValue)) {
int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存。是否保存?", "提示", JOptionPane.YES_NO_CANCEL_OPTION);
if (saveChoose == JOptionPane.YES_OPTION) {
JFileChooser fileChooser = new JFileChooser(); //定义文件选择框
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setApproveButtonText("确定");
fileChooser.setDialogTitle("另存为");
int result = fileChooser.showSaveDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
statusLabel.setText("您没有选择任何文件");
return;
}
saveFileName = fileChooser.getSelectedFile();
if (saveFileName == null || saveFileName.getName().equals(""))
JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
else {
saveFile(); //调用保存方法
Text.setText("");
this.setTitle("新建文本");
statusLabel.setText(" 新建文本");
}
}
else if (saveChoose == JOptionPane.NO_OPTION) {
Text.replaceRange("", 0, Text.getText().length());
statusLabel.setText(" 新建文件");
this.setTitle("无标题 - 记事本");
isNewFile = true; //判断是否更改文件未保存设置的修改
undo.discardAllEdits(); // 撤消所有的"撤消"操作
mEdit_Undo.setEnabled(false);
rightclickMenu_Undo.setEnabled(false);
oldValue = Text.getText();
}
else return;
} else {
Text.setText("");
statusLabel.setText(" 新建文件");
this.setTitle("无标题 - 记事本");
isNewFile = true; //判断是否更改文件未保存设置的修改
undo.discardAllEdits();
mEdit_Undo.setEnabled(false);
rightclickMenu_Undo.setEnabled(false);
oldValue = Text.getText();
}
}
// 打开
else if (e.getActionCommand().equals("打开(O)")){
Text.requestFocus();
if (!Text.getText().equals(oldValue)) {
int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存。是否保存?", "提示", JOptionPane.YES_NO_CANCEL_OPTION);
if (saveChoose == JOptionPane.YES_OPTION) {
JFileChooser fileChooser = new JFileChooser(); //定义文件选择框
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setApproveButtonText("确定");
fileChooser.setDialogTitle("另存为");
if (fileChooser.showSaveDialog(this) == JFileChooser.CANCEL_OPTION) {
statusLabel.setText("您没有选择任何文件");
return;
}
saveFileName = fileChooser.getSelectedFile();
if (saveFileName == null || saveFileName.getName().equals(""))
JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
else {
saveFile(); //调用保存方法
isNewFile = false; //判断是否更改文件未保存设置的修改
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -