简单文本编辑器。该程序可以新建、打开、编辑和保存文本文件。当用户点击New时,新建一个文件,用户可以编辑文件内容,然后点击Save保存文件。用户点击Open时,选择一个已有文件,然后可对文件进行编辑。示例输出如图所示。
package priv.lhw.text.editor;
import javax.swing.*;
import java.awt.*;
public class TextEditorFrame extends JFrame {
JTextArea jTextArea = new JTextArea(30, 40);
public TextEditorFrame(){
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
setSize(screenWidth/2, screenHeight/2);
int x = (screenWidth - getWidth()) / 2;
int y = (screenHeight - getHeight()) / 2;
setLocation(x, y);
setTitle("Text Editor");
setJMenuBar(new TextEditorMenu(this, jTextArea));
add(new JScrollPane(jTextArea));
}
}
package priv.lhw.text.editor;
import javax.swing.*;
public class TextEditorMenu extends JMenuBar {
JFrame jFrame;
JTextArea jTextArea;
public TextEditorMenu(JFrame jFrame, JTextArea jTextArea){
this.jFrame = jFrame;
this.jTextArea = jTextArea;
add(new TextEditorMenuFile(jFrame, jTextArea));
}
}
package priv.lhw.text.editor;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
public class TextEditorMenuFile extends JMenu {
String path;
JMenuItem neww;
JMenuItem open;
JMenuItem save;
JMenuItem exit;
JFrame jFrame;
private JFileChooser jFileChooser;
JTextArea jTextArea;
public TextEditorMenuFile(JFrame jFrame, JTextArea jTextArea){
super("File");
initNew();
initOpen();
initSave();
initExit();
this.jFrame = jFrame;
this.jTextArea = jTextArea;
jFileChooser = new JFileChooser();
path = ".";
}
private void initNew(){
neww = new JMenuItem("New");
neww.addActionListener(new FileNewListener());
add(neww);
}
private void initOpen(){
open = new JMenuItem("Open");
open.addActionListener(new FileOpenListener());
add(open);
}
private void initSave(){
save = new JMenuItem("Save");
save.addActionListener(new FileSaveListener());
add(save);
}
private void initExit(){
exit = new JMenuItem("Exit");
exit.addActionListener(e -> System.exit(0));
add(exit);
}
private class FileOpenListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
jFileChooser.setCurrentDirectory(new File("."));
TextFileFilter fileFilter = new TextFileFilter();
jFileChooser.setFileFilter(fileFilter);
jFileChooser.showOpenDialog(jFrame);
String fileName = jFileChooser.getSelectedFile().getPath();
jTextArea.setText("");
jFrame.setTitle(fileName);
File file = jFileChooser.getSelectedFile();
path = file.getPath();
FileReader fileReader = null;
try{
try {
fileReader = new FileReader(file);
char[] buf = new char[(int)file.length()];
int len = fileReader.read(buf);
jTextArea.append(new String(buf, 0, len));
} finally {
assert fileReader != null;
fileReader.close();
}
} catch (IOException exception){
exception.printStackTrace();
}
}
}
public class FileSaveListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
jFileChooser.setCurrentDirectory(new File(path));
TextFileFilter filter = new TextFileFilter();
jFileChooser.setFileFilter(filter);
jFileChooser.showSaveDialog(jFrame);
jFileChooser.setSelectedFile(new File("new.txt"));
File file = jFileChooser.getSelectedFile();
if (!file.exists()){
try {
file.createNewFile();
} catch (IOException exception) {
exception.printStackTrace();
}
}
try {
FileOutputStream out = new FileOutputStream(file);
out.write(jTextArea.getText().trim().getBytes());
out.close();
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
public class TextFileFilter extends FileFilter{
@Override
public String getDescription() {
return "文本文件(.txt)";
}
@Override
public boolean accept(File f) {
if (f.isDirectory()){
return true;
}
String name = f.getName().toLowerCase();
return name.endsWith(".txt");
}
}
public class FileNewListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
jTextArea.setText("");
jFrame.setTitle("new");
}
}
}
package priv.lhw.text.editor;
import javax.swing.*;
import java.awt.*;
public class Tool {
public static void setUiFont() {
Font f = new Font("SansSerif", Font.PLAIN, 20);
String[] names = { "Label", "CheckBox", "PopupMenu", "MenuItem", "CheckBoxMenuItem", "JRadioButtonMenuItem",
"ComboBox", "Button", "Tree", "ScrollPane", "TabbedPane", "EditorPane", "TitledBorder", "Menu",
"TextArea", "OptionPane", "MenuBar", "ToolBar", "ToggleButton", "ToolTip", "ProgressBar", "TableHeader",
"Panel", "List", "ColorChooser", "PasswordField", "TextField", "Table", "Label", "Viewport",
"RadioButtonMenuItem", "RadioButton", "DesktopPane", "InternalFrame" };
for (String item : names) {
UIManager.put(item + ".font", f);
}
}
}
package priv.lhw.text.editor;
import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
Tool.setUiFont();
TextEditorFrame textEditorFrame = new TextEditorFrame();
textEditorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
textEditorFrame.setVisible(true);
});
}
}