📄 searchdialog.java
字号:
package com.niit.NotaPad;
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.*;
public class SearchDialog extends JDialog {
private static final long serialVersionUID = 1001L;
private JLabel label;
private JButton searchNext, back;
private JCheckBox checkWord;
private JRadioButton radioUp, radioDown;
private JTextField field;
private JTextArea text;
private JPanel panel, panelR;
//=============查找功能的实现===============
public SearchDialog(final JFrame frame, final JTextArea textArea) {
super(frame, "查找");
text = textArea;
label = new JLabel("要查询的内容:");
field = new JTextField("", 10);
field.setText(textArea.getSelectedText());
searchNext = new JButton("下一个(N)");
searchNext.setMnemonic('n');
back = new JButton("取消");
checkWord = new JCheckBox("不区分大小写(C)");
checkWord.setMnemonic('C');
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);
panelR = new JPanel();
panelR.add(radioUp);
panelR.add(radioDown);
panelR.setBorder(BorderFactory.createTitledBorder("方向"));
JPanel panel1 = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 5));
panel1.add(label);
panel1.add(field);
panel1.add(searchNext);
panel = new JPanel();
panel.add(panel1);
panel.add(checkWord);
panel.add(panelR);
panel.add(back);
add(panel);
setSize(350, 140);
setResizable(false);
setLocation(400, 300);
setVisible(true);
searchNext.addActionListener(new SearchHandle());
// ================取消窗口事件 =================
back.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
{
SearchDialog.this.dispose();
}
}
});
}
// ===============Search 事件 ==================
class SearchHandle implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
String s = field.getText();
String area = text.getText();
if (s.length()==0) {
JOptionPane.showMessageDialog(SearchDialog.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(SearchDialog.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(
SearchDialog.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(
SearchDialog.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(SearchDialog.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(
SearchDialog.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(
SearchDialog.this, "找不到" + s);
}
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -