需求
一个简单的文本编辑器,能读取文件和保存文件,能高亮对应单词
思路
写一个窗体程序,程序里添加文件读取和保存
使用DefaultHighlighter做单词的高亮,目前就做固定单词高亮
实现
public class TextEditor extends JFrame implements ActionListener {
private JTextArea textArea;
private JFileChooser fileChooser;
public TextEditor() {
//框架
setTitle("文本编辑器");
setSize(800, 600);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//文本区
textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
add(scrollPane, BorderLayout.CENTER);
//菜单
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("文件");
JMenuItem openItem = new JMenuItem("打开");
JMenuItem saveItem = new JMenuItem("保存");
JMenuItem exitItem = new JMenuItem("退出");
openItem.addActionListener(this);
saveItem.addActionListener(this);
exitItem.addActionListener(this);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(exitItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
//文件选择器
fileChooser = new JFileChooser();
//高亮功能
textArea.addCaretListener(e -> highlightWords());
}
@Override
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
switch (command) {
case "打开":
openFile();
break;
case "保存":
saveFile();
break;
case "退出":
System.exit(0);
break;
}
}
private void openFile() {
int state = fileChooser.showOpenDialog(this);
if (state == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
textArea.read(reader,null);
} catch (IOException ex) {
JOptionPane.showMessageDialog(this,"打开文件时出现了问题" + ex.getMessage(),
"啊偶",JOptionPane.ERROR_MESSAGE);
}
}
}
private void saveFile() {
int state = fileChooser.showSaveDialog(this);
if(state == JFileChooser.APPROVE_OPTION){
File file = fileChooser.getSelectedFile();
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
textArea.write(writer);
}catch (IOException ex){
JOptionPane.showMessageDialog(this,"保存文件时出现了问题" + ex.getMessage(),
"啊偶",JOptionPane.ERROR_MESSAGE);
}
}
}
public void highlightWords() {
textArea.getHighlighter().removeAllHighlights();
//所有文本
String text = textArea.getText();
//高亮单词
String[] keyWords = {"Public", "World"};
//做一个高亮单词的循环
for(String key : keyWords){
int index = text.indexOf(key);
DefaultHighlighter.DefaultHighlightPainter painter =
new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE);
while(index >= 0){
try {
//绘制高亮
textArea.getHighlighter().addHighlight(index, index + key.length(), painter);
//下一个
index = text.indexOf(key, index + 1);
} catch (BadLocationException e) {
System.out.println("高亮出问题了:" + e.getMessage());
}
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
TextEditor editor = new TextEditor();
editor.setVisible(true);
});
}