📄 editor.java
字号:
package editor;
import static net.SwingConsole.*;
import javax.swing.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.JMenuItem;
import java.util.*;
public class Editor extends JFrame {
private JMenu m1 = new JMenu("文件(F)"), m2 = new JMenu("编辑(E)"),
m3 = new JMenu("格式(O)"), m4 = new JMenu("查看(V)"), m5 = new JMenu(
"帮助(H)");
private JMenuItem[] wenjians = { new JMenuItem("新建(N)"), new JMenuItem("打开(O)"),
new JMenuItem("保存(S)"), new JMenuItem("另存为(A)"), new JMenuItem("页面设置"),
new JMenuItem("打印"), new JMenuItem("退出") };
private JMenuItem[] bianjis = { new JMenuItem("撤销"), new JMenuItem("剪切"),
new JMenuItem("复制"), new JMenuItem("粘贴"), new JMenuItem("删除"),
new JMenuItem("查找"), new JMenuItem("查找下一个"), new JMenuItem("替换"),
new JMenuItem("全选"), new JMenuItem("时间/日期"), };
private JMenuItem[] geshis = { new JCheckBoxMenuItem("自动换行(未实现)"), new JMenuItem("字体") };
private JMenuItem[] chakans = { new JMenuItem("状态栏") };
private JMenuItem[] bangzhus = { new JMenuItem("帮助主题"),
new JMenuItem("关于编辑器") };
private JTextArea t = new JTextArea();
private JMenuBar mb1 = new JMenuBar();
private File open;
public Editor() {
for (int i = 0; i < wenjians.length; i++) {
m1.add(wenjians[i]);
if (i == 3 || i == 5)
m1.addSeparator(); // 追加分隔符
}
for (int i = 0; i < bianjis.length; i++) {
m2.add(bianjis[i]);
if (i == 0 || i == 4 || i == 7)
m2.addSeparator(); // 追加分隔符
}
for (int i = 0; i < geshis.length; i++) {
m3.add(geshis[i]);
}
for (int i = 0; i < chakans.length; i++) {
m4.add(chakans[i]);
}
for (int i = 0; i < bangzhus.length; i++) {
m5.add(bangzhus[i]);
if (i == 0)
m5.addSeparator(); // 追加分隔符
}
//新建一个文件
wenjians[0].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
run(new Editor(), 800, 600);
}
});
/*******打开功能*********/
wenjians[1].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser c = new JFileChooser();
int hit = c.showOpenDialog(null);
if (hit == JFileChooser.APPROVE_OPTION) {
try {
/*****************************************************************
* *************************通道尝试失败。。。。******************
*****************************************************************/
/* RandomAccessFile in = new RandomAccessFile(c.getSelectedFile(),"rw");
FileChannel channel = in.getChannel();
int length = (int)channel.size();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, length);
byte[] b = new byte[length];
while(buffer.hasRemaining()){
buffer.get(b);
}*/
/**********************随机访问文件的读取**************************/
open = c.getSelectedFile(); //获得打开的文件的引用
RandomAccessFile in = new RandomAccessFile(open,"rw");
byte[] b = new byte[(int)in.length()]; //缓冲区
in.read(b);
t.setText(new String (b,0,b.length)); // 读出缓冲区的字符
in.close(); //关闭流
} catch (IOException ex) {
return ;
}
}
}
});
/** *******保存功能************ */
wenjians[2].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser c = new JFileChooser();
if (open == null) {
int hit = c.showSaveDialog(null);
if (hit == JFileChooser.APPROVE_OPTION) {
try {
RandomAccessFile out = new RandomAccessFile(c
.getSelectedFile(), "rw");
byte[] b = (t.getText()).getBytes(); // 获得文本,再转换为
// byte序列,
// 并将存储到数组中
out.write(b);
out.close();
} catch (IOException ex) {
return;
}
}
}else{
try {
open.delete(); //删除原文件
RandomAccessFile out = new RandomAccessFile(open, "rw");
byte[] b = (t.getText()).getBytes(); // 获得文本,再转换为
// byte序列,
// 并将存储到数组中
out.write(b);
out.close();
} catch (IOException ex) {
// TODO 自动生成 catch 块
return ;
}
}
}
});
/****************另存为功能****************/
wenjians[3].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser c = new JFileChooser();
int hit = c.showSaveDialog(null);
if (hit == JFileChooser.APPROVE_OPTION) {
try {
/**********************随机访问文件的存储**************************/
if(c.getSelectedFile().exists()){ //假如文件已经存在
if(0==JOptionPane.showConfirmDialog(null,c.getCurrentDirectory().toString()
+"\\"+c.getSelectedFile().getName()+"已存在。\n要替换它吗?","另存为",
JOptionPane.YES_NO_OPTION))
c.getSelectedFile().delete(); //删除原文件
else return ; //返回重新操作
}
RandomAccessFile out = new RandomAccessFile(c.getSelectedFile(),"rw");
byte[] b = (t.getText()).getBytes(); //获得文本,再转换为 byte 序列,并将存储到数组中
out.write(b);
out.close();
} catch (IOException ex) {
return ;
}
}
}
});
/**********退出功能**************/
wenjians[6].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
dispose();
}
});
/********撤销功能********/
bianjis[0].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
}
});
/********剪切功能********/
bianjis[1].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
t.cut();
}
});
/********复制功能********/
bianjis[2].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
t.copy();
}
});
/********粘贴功能********/
bianjis[3].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
t.paste();
}
});
/********删除功能********/
bianjis[4].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
t.replaceSelection(null);
}
});
/********自动换行功能********/
/*未实现*/
/*geshis[0].addItemListener(new ItemListener(){
public void actionPerformed(ItemEvent e){
JCheckBoxMenuItem target = (JCheckBoxMenuItem) e.getSource();
t.setWrapStyleWord(target.getState());
}
public void itemStateChanged(ItemEvent e) {
// TODO 自动生成方法存根
}
});
*/
/*********添加按钮到菜单栏************/
mb1.add(m1);
mb1.add(m2);
mb1.add(m3);
mb1.add(m4);
mb1.add(m5);
setJMenuBar(mb1); // 创建菜单栏
add(new JScrollPane(t)); // 创建文本区域
m1.setMnemonic(KeyEvent.VK_F); // 快捷键
m2.setMnemonic(KeyEvent.VK_E); // 快捷键
m3.setMnemonic(KeyEvent.VK_O); // 快捷键
m4.setMnemonic(KeyEvent.VK_V); // 快捷键
m5.setMnemonic(KeyEvent.VK_H); // 快捷键
/*****************加速器*******************/
wenjians[0].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
wenjians[1].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
wenjians[2].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
wenjians[3].setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
/*****************禁用菜单*****************/
wenjians[4].setEnabled(false);
wenjians[5].setEnabled(false);
bianjis[5].setEnabled(false);
bianjis[6].setEnabled(false);
bianjis[7].setEnabled(false);
bianjis[8].setEnabled(false);
bianjis[9].setEnabled(false);
geshis[1].setEnabled(false);
chakans[0].setEnabled(false);
bangzhus[0].setEnabled(false);
bangzhus[1].setEnabled(false);
}
public static void main(String[] args) {
run(new Editor(), 800, 600);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -