📄 replacedialog.java
字号:
package com.niit.NotaPad;
import javax.swing.*;
import java.awt.event.*;
public class ReplaceDialog extends JDialog {
private static final long serialVersionUID = 1001L;
private JLabel label1, label2;
private JCheckBox checkWord;
private JTextField searchWord, repalceWord;
private JTextArea text;
private JRadioButton radioUp, radioDown;
//==============替换页面及其功能实现==================
public ReplaceDialog(final JFrame frame, JTextArea textArea) {
super(frame, "查找与替换");
this.setBounds(300, 300, 390, 180);
this.setVisible(true);
this.setResizable(false);
this.setLayout(null);
text = textArea;
label1 = new JLabel("查找内容:");
label2 = new JLabel("替换为:");
searchWord = new JTextField();
searchWord.setText(textArea.getSelectedText());
repalceWord = new JTextField();
checkWord = new JCheckBox("区别大小写");
radioUp = new JRadioButton("向上(U)");
radioUp.setMnemonic('U');
radioDown = new JRadioButton("向下(D)");
radioDown.setMnemonic('D');
radioDown.setSelected(true);
ButtonGroup group = new ButtonGroup();
group.add(radioUp);
group.add(radioDown);
setmodel(label1, 5, 5, 65, 25);
setmodel(label2, 5, 35, 65, 25);
setmodel(searchWord, 85, 5, 140, 20);
setmodel(repalceWord, 85, 40, 140, 20);
setmodel(radioUp,110,85,90,30);
setmodel(radioDown,110,115,90,30);
setmodel(checkWord, 7, 100, 90, 25);
setmodel("查找下一个(N)", 'N', new SearchHandle(), 250, 5, 120, 25);
setmodel("替换(R)", 'R', new ReplaceHandle(), 250, 40, 120, 25);
setmodel("全部替换(A)", 'A', new ReplaceAllHandle(), 250, 75, 120, 25);
setmodel("取消", 'a', new BackHandle(), 250, 110, 120, 25);
}
// ==============初始化组件的方法===================
public void setmodel(JComponent b, int i, int j, int k, int m) {
b.setBounds(i, j, k, m);
ReplaceDialog.this.add(b);
}
public void setmodel(String s, char c, ActionListener listener, int i,
int j, int k, int m) {
JButton b = new JButton(s);
b.setMnemonic(c);
b.addActionListener(listener);
b.setBounds(i, j, k, m);
ReplaceDialog.this.add(b);
}
// ===============Search 事件 ==================
class SearchHandle implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
String s = searchWord.getText();
String area = text.getText();
if (s.length()==0) {
JOptionPane.showMessageDialog(ReplaceDialog.this, "请输入查找内容");
} else {
// 判断区分大小写是否被选
if (checkWord.isSelected()) {
// 全部变成小写,付给局部变量
String s1 = s.toLowerCase();
String area1 = area.toLowerCase();
// 判断搜索方向,现讨论的是向下搜索,同时判断用户输入不为空
if (radioDown.isSelected()) {
// 判断是否包含所要查找的内容
if (area1.indexOf(s1, text.getCaretPosition()) != -1) {
// 若存在,则文本选定返回查找到处 的索引,到字符串长度的字段
text.select(area1.indexOf(s1, text
.getCaretPosition()), area1.indexOf(s1,
text.getCaretPosition())
+ s.length());
} else {
JOptionPane.showMessageDialog(ReplaceDialog.this,
"找不到" + s);
}
} else {
// 为向后查找,并根据查找的次数,要断定是否是从光标处向后查找
if (text.getSelectedText() != "") {
if (area.lastIndexOf(s1, text.getCaretPosition()
- (s.length() + 1)) != -1) {
text.select(area.lastIndexOf(s1, text
.getCaretPosition()
- s.length() - 1), area.lastIndexOf(s1,
text.getCaretPosition() - s.length()
- 1)
+ s.length());
} else {
JOptionPane.showMessageDialog(
ReplaceDialog.this, "找不到" + s);
}
} else {// 当是第一次查找的时候
if (area.lastIndexOf(s1, text.getCaretPosition()) != -1) {
text.select(area.lastIndexOf(s1, text
.getCaretPosition()), area.lastIndexOf(
s1, text.getCaretPosition())
+ s.length());
} else {
JOptionPane.showMessageDialog(
ReplaceDialog.this, "找不到" + s);
}
}
}
} else {// 当没有选择不区别大小写的情况
if (radioDown.isSelected()) {
if (area.indexOf(s, text.getCaretPosition()) != -1) {
text.select(area
.indexOf(s, text.getCaretPosition()), area
.indexOf(s, text.getCaretPosition())
+ s.length());
} else {
JOptionPane.showMessageDialog(ReplaceDialog.this,
"找不到" + s);
}
} else {// 判断是否是第一次向后查找
if (text.getSelectedText() != "") {
if (area.lastIndexOf(s, text.getCaretPosition()
- s.length() - 1) != -1) {
text.select(area.lastIndexOf(s, text
.getCaretPosition()
- s.length() - 1), area.lastIndexOf(s,
text.getCaretPosition() - s.length()
- 1)
+ s.length());
} else {
JOptionPane.showMessageDialog(
ReplaceDialog.this, "找不到" + s);
}
} else {// 第一次向后查找
if (area
.lastIndexOf(s, text.getCaretPosition() - 1) != -1) {
text.select(area.lastIndexOf(s, text
.getCaretPosition() - 1), area
.lastIndexOf(s,
text.getCaretPosition() - 1)
+ s.length());
} else {
JOptionPane.showMessageDialog(
ReplaceDialog.this, "找不到" + s);
}
}
}
}
}
}
}
// ================Replace事件 =================
class ReplaceHandle implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
//判断是否已有查找到的信息,无就提示没有要替换的内容,有则替换之
if(text.getSelectedText()==null)
{
JOptionPane.showMessageDialog(
ReplaceDialog.this, "无可替换内容" );
}else{
text.replaceSelection(repalceWord.getText());
}
}
}
// ================ReplaceAll事件 ==================
class ReplaceAllHandle implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
String s = searchWord.getText().toString();
String area = text.getText();
int count = 0;
if(s.length()==0||repalceWord.getText().toString().length()==0)
{
JOptionPane.showMessageDialog(
ReplaceDialog.this, "无可替换内容" );
}
else
{
//判断是否忽略大小写
if (checkWord.isSelected()) {
// 全部变成小写,付给局部变量
String s1 = s.toLowerCase();
String area1 = area.toLowerCase();
//把每一个查询到 的信息都替换掉,count用户标记查找到的位置,故初始位置为0
while (area.indexOf(s1, count) != -1) {
text.replaceRange(repalceWord.getText(), area1.indexOf(s1,
count), area1.indexOf(s1, count) + s.length());
count = area1.indexOf(s1, count) + s.length();
}
} else {
while (area.indexOf(s, count) != -1) {
text.replaceRange(repalceWord.getText(), area.indexOf(s,
count), area.indexOf(s, count) + s.length());
count = area.indexOf(s, count) + s.length();
}
}
}
}
}
// ================Back事件 ==================
class BackHandle implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
{
ReplaceDialog.this.dispose();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -