第一步 给窗口添加文本输入框
第二步 给窗口添加菜单栏选项并且加上监听
第三步 如何打开文件,保存文件,新建文件,另存为文件
第四步 实现复制,粘贴,剪切,删除,撤销功能
第一步:给窗口添加文本输入框
TextArea ta = new TextArea();
Font font = new Font("宋体", Font.PLAIN, 15);// 设置字体
ta.setFont(font);
JScrollPane jsp = new JScrollPane(ta);// 将文本框加给JScrollPane视图
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);/// 添加垂直滚条
第二步:添加菜单和监听(该类直接继承JFfame类和ActionListener接口)
JMenuBar jmBar = new JMenuBar();// 菜单选项
JMenu menu1 = new JMenu("文件(F)");// 创建菜单条
menu1.setMnemonic('F');// 设置快捷键Alt + f
JMenuItem item0 = new JMenuItem("新建");
item0.setActionCommand("Create");
item0.addActionListener(this);
menu1.add(item0);// 给menu1菜单条加上选项
//依次类推加上打开,保存等...
jmBar.add(menu1);// 将菜单条加给jmBar菜单
重点内容
第三步:如何实现打开文件,新建文件,保存文件,另存为文件
这里用到FileDialog文件对话框,和IO输入输出流(可以查看之前的博客)。
public void SaveOtherFile() throws IOException {// 另存为文件
FileDialog fd1 = new FileDialog(this, "另存为文件", FileDialog.SAVE);//括号第一个为窗体对象
fd1.setFile("*.txt");
fd1.setVisible(true);
// 创建流
OutputStream os = new FileOutputStream(fd1.getDirectory() + fd1.getFile());
// 获取所需要的内容
os.write(neirong.getBytes("gbk"));
os.flush();// 刷新流
os.close();// 关闭流
fd = null;//另存为文件之后,将fd对象变成空,避免bug
}
public void SaveFile() throws IOException {// 保存文件
// 创建流
OutputStream os = new FileOutputStream(fd.getDirectory() + fd.getFile());
// 获取所需要的内容
neirong = ta.getText();
os.write(neirong.getBytes("gbk"));
os.flush();// 刷新流
os.close();// 关闭流
}
public void openFile() throws IOException {// 打开文件
// 创建文件对话框
fd = new FileDialog(this, "打开文件", FileDialog.LOAD);
fd.setFile("*.txt");// 过滤文件(只显示后缀为txt的文件)
fd.setVisible(true);// 设置可见
// 创建流
InputStream is = new FileInputStream(fd.getDirectory() + fd.getFile());
byte[] bytes = new byte[is.available()];
is.read(bytes);
String str = new String(bytes);// 将读取的内容进行处理
ta.setText(str);
is.close();// 关闭流
}
新建文件就将文本内容置为空就行了 ta.setText(null);
第四步,复制,粘贴,剪切,撤销,删除
这里用到系统的剪贴板
private Clipboard clipboard = getToolkit().getSystemClipboard();// 获取系统的剪贴板
public void Copy() {// 复制
// 拖动选取文本
String temp = this.ta.getSelectedText();
// 把获取的内容复制到连续字符器,这个类继承了剪贴板接口
StringSelection text = new StringSelection(temp);
// 把内容放在剪贴板
this.clipboard.setContents(text, null);
}
public void Shear() {// 剪切
// 拖动选取文本
String temp = this.ta.getSelectedText();
// 把获取的内容复制到连续字符器,这个类继承了剪贴板接口
StringSelection text = new StringSelection(temp);
// 把内容放在剪贴板
this.clipboard.setContents(text, null);
// 标记开始位置
int start = ta.getSelectionStart();
// 标记结束位置
int end = ta.getSelectionEnd();
// 删除所选段
ta.replaceRange("", start, end);
}
public void Paste() throws UnsupportedFlavorException, IOException {// 粘贴
// Transferable接口,把剪贴板的内容转换成数据
Transferable contents = clipboard.getContents(this);
// DataFalvor类判断是否能把剪贴板内容转换成所需数据类型
DataFlavor flavor = DataFlavor.stringFlavor;
// 如果可以转换
if (contents.isDataFlavorSupported(flavor)) {
String str;
// 开始转换
str = (String) contents.getTransferData(flavor);
// 如果要粘贴时,鼠标已经选取了一段字符
if (ta.getSelectedText() != null) {
// 定位被选中字符开始位置
int start = ta.getSelectionStart();
// 定位被选中字符结束位置
int end = ta.getSelectionEnd();
// 替换被选中内容
ta.replaceRange(str, start, end);
} else {
// 获取鼠标所在TextArea的位置
int mouse = ta.getCaretPosition();
// 在鼠标所在位置粘贴内容
ta.insert(str, mouse);
}
}
}
public void Delete() {//删除
// 定位被选中字符开始位置
int start = ta.getSelectionStart();
// 定位被选中字符结束位置
int end = ta.getSelectionEnd();
// 替换被选中内容
ta.replaceRange("", start, end);
}
撤销功能用TextArea还没找到方法。不过使用JTextArea可以实现
UndoManager um = new UndoManager();
JTextArea jta = new JTextArea();
jta.getDocument().addUndoableEditListener(um);//把撤销管理器的监听器添加到JTextArea中
um.undo();//撤销的时候调用这个方法