📄 myframe.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyFrame extends Frame {
TextArea textArea;
public static int pos = 0; // 声明确定查找位置的变量
public MyFrame() {
// 创建菜单与菜单项的实例对象
MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu();
MenuItem menuFileOpen = new MenuItem();
MenuItem menuFileSave = new MenuItem();
MenuItem menuFileExit = new MenuItem();
//命名菜单项
menuFile.setLabel("文件");
menuFileOpen.setLabel("打开");
menuFileSave.setLabel("保存");
menuFileExit.setLabel("退出");
//在menuFile中添加菜单项
menuFile.add(menuFileOpen);
menuFile.add(menuFileSave);
menuFile.addSeparator();
menuFile.add(menuFileExit);
menuBar.add(menuFile);
//设置窗口名称和大小添加菜单
setTitle("文件分析工具");
setMenuBar(menuBar);
setSize(new Dimension(500, 400));
//在Frame中添加组件
Panel p1 = new Panel();
p1.setBackground(Color.gray);
Button b1 = new Button("查找字符串");
p1.add(b1);
final TextField field1 = new TextField(10);
p1.add(field1);
Button b2 = new Button("下一个");
p1.add(b2);
final TextField field2 = new TextField(10);
p1.add(field2);
Button b3 = new Button("替换字符串");
p1.add(b3);
add("South", p1);
Panel p2 = new Panel();
p2.setLayout(new BorderLayout());
this.textArea = new TextArea("");
p2.add(textArea);
add("Center", p2);
// 事件监听,实现打开,保存,退出
menuFileOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MyFrame frame = new MyFrame();
FileDialog d1 = new FileDialog(frame, "打开", FileDialog.LOAD);
d1.setVisible(true);
MyFrame.this.textArea.setText("");
try {
// 获得要操作文件
File myfile1 = new File(d1.getDirectory(), d1.getFile());
// 用随机存取文件类来读取文件
RandomAccessFile raf1 = new RandomAccessFile(myfile1, "rw");
while (raf1.getFilePointer() < raf1.length()) {
//在文本编辑区域显示该文件内容
MyFrame.this.textArea.append(raf1.readLine() + "\n");
}
} catch (IOException ioe) {
System.err.println(ioe.toString());
}
}
});
menuFileSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MyFrame frame = new MyFrame();
FileDialog d2 = new FileDialog(frame, "保存", FileDialog.SAVE);
d2.setVisible(true);
try {
MyFrame.this.textArea.getText();
File myfile1 = new File(d2.getDirectory(), d2.getFile());
// 字符流读写文件
FileWriter fw = new FileWriter(myfile1);
// 缓存流读取文件
BufferedWriter bfw = new BufferedWriter(fw);
bfw.write(MyFrame.this.textArea.getText(), 0,
MyFrame.this.textArea.getText().length());
bfw.flush();
fw.close();
} catch (IOException ioe) {
System.err.println(ioe.toString());
}
}
});
menuFileExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MyFrame.this.windowClosed();
}
});
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
MyFrame.this.windowClosed();
}
});
//实现查找,,
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
try {
String inputContent = textArea.getText();
String findContent = field1.getText();
// p和m是正则表达式中的内容java.util.regex
Pattern p = Pattern.compile(findContent,
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(inputContent);
m.find(); //
pos = m.start(); // 记录查找位置
if (pos >= 0) {
textArea.requestFocus(); // inputContent需要焦点才能设置选中
textArea.setSelectionStart(pos);
textArea.setSelectionEnd(pos + findContent.length());
}
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
});
//查找下一个
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
try {
String inputContent = textArea.getText();
String findContent = field1.getText();
Pattern p = Pattern.compile(findContent,
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(inputContent);
m.find(pos + findContent.length());// 开始查找
pos = m.start(); // 记录查找位置
if (pos >= 0) {
textArea.requestFocus(); // inputContent需要焦点才能设置选中
textArea.setSelectionStart(pos);
textArea.setSelectionEnd(pos + findContent.length());
}
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
});
//替换功能
b3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent enent) {
try {
String inputContent = textArea.getText();
String findContent = field1.getText();
String replaceContent = field2.getText();
Pattern p = Pattern.compile(findContent,
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(inputContent);
StringBuffer string = new StringBuffer();
// 查找到的内容替换掉,并放到StringBuffer中
while (m.find()) {
m.appendReplacement(string, replaceContent);
}
m.appendTail(string);
textArea.setText(string.toString());
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
});
}
protected void windowClosed() {
System.exit(0);
}
public static void main(String[] args) {
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -