记事本

我与影子孤独终老i 提交于 2019-12-05 11:29:55

import java.awt.;
import java.awt.datatransfer.
;
import java.awt.event.;
import java.io.
;
import javax.swing.*;
import javax.swing.plaf.basic.BasicBorders.RadioButtonBorder;

public class Editor02 extends JFrame implements ActionListener {
JComboBox comboBoxOfFontName, comboBoxOfFontsize;
JTextArea textArea;
JCheckBox checkBoxOfFontStylebold, checkBoxOfFontStyleitalic;
JRadioButton radiobuttonred, radiobuttonblue, radiobuttongreen;
ButtonGroup buttongroupcolor;
JPanel panelcolor;
Clipboard clipboard = getToolkit().getSystemClipboard();

public Editor02() {
super("记事本");
Dimension dim = this.getToolkit().getScreenSize();
this.setBounds(dim.width / 4, dim.height / 4, (dim.width / 2 + 40),dim.height / 2);
this.getContentPane().setLayout(new BorderLayout());
this.addMenuBar();
this.addToolBar();
this.addTextArea();
}

private void addMenuBar() {
JMenuBar menuBar = new JMenuBar();
JMenu filemenu = new JMenu("文件");
JMenu editormenu = new JMenu("编辑");
JMenu helpmenu = new JMenu("帮助");
JMenuItem menuItemOfOpen = new JMenuItem("打开");
JMenuItem menuItemOfSave = new JMenuItem("保存");
JMenuItem menuItemOfExit = new JMenuItem("退出");
JMenuItem menuItemOfCopy = new JMenuItem("复制");
JMenuItem menuItemOfCut = new JMenuItem("剪切");
JMenuItem menuItemOfPaste = new JMenuItem("粘贴");
JMenuItem menuItemOfDelete = new JMenuItem("删除");
JMenuItem menuItemOfHelpexplanation = new JMenuItem("帮助说明");
menuItemOfOpen.addActionListener(this);
menuItemOfSave.addActionListener(this);
menuItemOfExit.addActionListener(this);
menuItemOfCopy.addActionListener(this);
menuItemOfCut.addActionListener(this);
menuItemOfPaste.addActionListener(this);
menuItemOfDelete.addActionListener(this);
menuItemOfHelpexplanation.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String separator = System.getProperty("line.separator");// 获得系统默认的分隔符-固定写法(写死了的!)
final JFrame helpjframe = new JFrame("帮助说明");
helpjframe.setBounds(410, 250, 600, 320);
helpjframe.setVisible(true);
helpjframe.setLayout(new BorderLayout());
TextArea helpjframetextArea = new TextArea();
helpjframetextArea.setText("该文本功能如下:" + separator + separator

  • "1.实现基本的TXT文件保存和打开" + separator + separator
  • "2.实现基本的剪辑,复制,粘贴,删除功能" + separator + separator
  • "3.实现基本的字体处理操作!");
    helpjframetextArea.setForeground(getForeground().blue); // 设置前景色(字体的颜色)
    helpjframetextArea.setFont(new Font(null, HEIGHT, 26)); // 设置字体大小,样式
    JButton helpjframeButton = new JButton("退出");

helpjframe.add(helpjframetextArea);
helpjframe.add(helpjframeButton);

helpjframe.add(helpjframetextArea, "Center"); // 简单布局
helpjframe.add(helpjframeButton, "South");
helpjframeButton.addActionListener(new ActionListener() {
// 实现对“帮助说明”窗体中的“退出”按钮的监听事件处理
@Override
public void actionPerformed(ActionEvent e) {
if (JOptionPane.showConfirmDialog(helpjframe, "是否退出?") == 0) {
helpjframe.setVisible(false);
}
}
});
}
});
// 给文本域添加鼠标监听器

// 菜单项加到"文件"菜单
filemenu.add(menuItemOfOpen);
filemenu.add(menuItemOfSave);
filemenu.addSeparator(); // 添加分隔线
filemenu.add(menuItemOfExit);
// 菜单项加到"编辑"菜单
editormenu.add(menuItemOfCopy);
editormenu.add(menuItemOfCut);
editormenu.add(menuItemOfPaste);
editormenu.add(menuItemOfDelete);
// 菜单项添加到"帮助"菜单
helpmenu.add(menuItemOfHelpexplanation);
// 将"文件"菜单,"编辑"菜单,"帮助"菜单加到菜单栏
menuBar.add(filemenu);
menuBar.add(editormenu);
menuBar.add(helpmenu);
// 设置窗体的菜单栏
this.setJMenuBar(menuBar);
}

private void addToolBar() {
// 创建工具栏
JToolBar toolBar = new JToolBar();
// 设置工具栏的布局
toolBar.setLayout(new FlowLayout(FlowLayout.LEFT));
// 获取系统字体名字
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String fontNames[] = ge.getAvailableFontFamilyNames();
// 设置文字大小数组
String fontsizeNames[] = { "20", "23", "26", "29", "32", "35", "38","42" };
// 创建“字体”标签
Label fontlabel = new Label("字体:");
// 创建“大小”标签
Label fontsizelabel = new Label("大小:");
// 创建“风格”标签
Label fontstyle = new Label("风格:");
// 创建“颜色”标签
Label fontcolor = new Label("颜色:");
// 创建字体组合框
comboBoxOfFontName = new JComboBox(fontNames);
// 创建字体大小组合框
comboBoxOfFontsize = new JComboBox(fontsizeNames);
// 创建字体风格复选框
checkBoxOfFontStylebold = new JCheckBox("粗体");
checkBoxOfFontStyleitalic = new JCheckBox("斜体");
// 创建颜色面板
panelcolor = new JPanel();
// 创建颜色按钮组
buttongroupcolor = new ButtonGroup();
// 创建字体颜色单选按钮
radiobuttonred = new JRadioButton("红");
radiobuttonblue = new JRadioButton("蓝");
radiobuttongreen = new JRadioButton("绿");
// 字体组合框注册单击事件侦听器
comboBoxOfFontName.addActionListener(this);
// 字体大小组合框注册单击事件监听器
comboBoxOfFontsize.addActionListener(this);
// 给复选框注册单击事件监听器
checkBoxOfFontStylebold.addActionListener(this);
checkBoxOfFontStyleitalic.addActionListener(this);
// 给单选按钮注册单击事件监听器
radiobuttonred.addActionListener(this);
radiobuttonblue.addActionListener(this);
radiobuttongreen.addActionListener(this);
// 在字体组合框中添加“字体”标签
toolBar.add(fontlabel);
// 字体组合框加到工具栏
toolBar.add(comboBoxOfFontName);
// 在字体大小组合框中加“大小”标签
toolBar.add(fontsizelabel);
// 字体大小组合框加到工具栏
toolBar.add(comboBoxOfFontsize);
// 给复选框添加“风格”标签
toolBar.add(fontstyle);
// 字体风格复选框加到工具栏
toolBar.add(checkBoxOfFontStylebold);
toolBar.add(checkBoxOfFontStyleitalic);
// 给单选框添加“颜色”标签
toolBar.add(fontcolor);
// 字体颜色单选按钮加到颜色按钮组中
buttongroupcolor.add(radiobuttonred);
buttongroupcolor.add(radiobuttonblue);
buttongroupcolor.add(radiobuttongreen);
// 往面板中加入单选按钮
panelcolor.add(radiobuttonred);
panelcolor.add(radiobuttonblue);
panelcolor.add(radiobuttongreen);
// 颜色按钮组加到工具栏
toolBar.add(panelcolor);
// 工具栏加到内容面板北边
this.getContentPane().add(toolBar, "North");
}

private void addTextArea() {
textArea = new JTextArea("欢迎来到我的世界,上帝你好!");
textArea.setLineWrap(true); // 设置文本域为自动换行
textArea.setBackground(getBackground().pink); // 给文本域设置背景颜色为粉红
JScrollPane textareascrollPane = new JScrollPane(textArea); // 将文本域添加到含有下拉框(条)的面板中
this.getContentPane().add(textareascrollPane); // 将含有下拉框的面板放入内容面板中
this.getContentPane().add(textareascrollPane, "Center"); // 完成下拉框面板在内容面板中的边界布局,居中
// 设置下拉框面板的下拉条总是可见
textareascrollPane.setVerticalScrollBarPolicy(textareascrollPane.VERTICAL_SCROLLBAR_ALWAYS);
}

/*

  • 单击事件处理
    /
    @Override
    public void actionPerformed(ActionEvent e) {
    // 获取文本区的字体
    Font font = textArea.getFont();
    int fontStyle = font.getStyle();
    int fontSize = font.getSize();
    String fontName = font.getName();
    // 判断是否点击了“文件”菜单
    if (e.getSource() instanceof JMenuItem) {
    // 处理打开文件事件
    if (e.getActionCommand() == "打开") {
    // System.out.println("open !"); //该语句用于设计师的测试
    Openfile();
    }
    // 处理保存文件事件
    if (e.getActionCommand() == "保存") {
    // System.out.println("save !"); //该语句用于设计师的测试
    Savefile();
    }
    // 点击退出就退出程序
    if (e.getActionCommand() == "退出") {
    // System.out.println("exit !"); //该语句用于设计师的测试
    Exiteditor();
    }
    }
    // 判断是否点击了“编辑”菜单
    if (e.getSource() instanceof JMenuItem) {
    // 处理复制事件
    if (e.getActionCommand() == "复制") {
    String tempText = textArea.getSelectedText(); // 拖动鼠标选取文本
    // 创建能传输指定 String 的 Transferable。
    StringSelection editText = new StringSelection(tempText);
    /
  • 将剪贴板的当前内容设置到指定的 transferable 对象, 并将指定的剪贴板所有者作为新内容的所有者注册。
    /
    clipboard.setContents(editText, null);
    return;
    }
    // 处理粘贴事件
    if (e.getActionCommand() == "粘贴") {
    // textArea.paste();
    // System.out.println("1234"); 测试数据
    int start = textArea.getSelectionStart();
    int end = textArea.getSelectionEnd();
    Transferable contents = clipboard.getContents(this);
    DataFlavor flavor = DataFlavor.stringFlavor;
    if (contents.isDataFlavorSupported(flavor)) {
    try {
    String str;
    str = (String) contents.getTransferData(flavor);
    // System.out.println(str); 测试数据
    textArea.replaceRange(str, start, end);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }
    // setSysClipboardText("");
    return;
    }
    // 处理删除事件
    if (e.getActionCommand() == "删除") {
    int start = textArea.getSelectionStart();
    int end = textArea.getSelectionEnd();
    textArea.replaceRange("", start, end);
    return;
    }
    // 处理剪切事件
    if (e.getActionCommand() == "剪切") {
    String tempText = textArea.getSelectedText();
    StringSelection editText = new StringSelection(tempText);
    clipboard.setContents(editText, null);
    int start = textArea.getSelectionStart();
    int end = textArea.getSelectionEnd();
    textArea.replaceRange("", start, end); // 从Text1中删除被选取的文本。
    return;
    }
    }
    //对字体风格和文字大小的处理
    if (e.getSource() instanceof JComboBox) {
    //处理文字大小
    if (e.getSource().equals(comboBoxOfFontsize)) {
    // 获取字体大小组合选中字体大小
    // fontSize = (int) comboBoxOfFontsize.getSelectedItem();
    String fontSize2;
    fontSize2 = (String) comboBoxOfFontsize.getSelectedItem();
    // 修改文本区字体
    textArea.setFont(new Font(fontName, fontStyle, Integer.parseInt(fontSize2)));
    }
    //处理字体风格
    if (e.getSource().equals(comboBoxOfFontName)) {
    // 获取字体组合选中字体名
    fontName = (String) comboBoxOfFontName.getSelectedItem();
    // 修改文本区字体
    textArea.setFont(new Font(fontName, fontStyle, fontSize));
    }
    }
    //对文字进行加粗或者还原处理
    if (e.getSource().equals(checkBoxOfFontStylebold)) {
    fontStyle = fontStyle ^ 1; // ^ 异或运算 (加粗:和1做异或运算)
    textArea.setFont(new Font(fontName, fontStyle, fontSize));
    }
    //对文字进行倾斜或者还原处理
    if (e.getSource().equals(checkBoxOfFontStyleitalic)) {
    fontStyle = fontStyle ^ 2; // (斜体:和2做异或运算)
    textArea.setFont(new Font(fontName, fontStyle, fontSize));
    }
    /
  • 对文字进行变色处理
    */
    if (e.getSource().equals(radiobuttonred)) {
    textArea.setForeground(Color.red);
    }

if (e.getSource().equals(radiobuttonblue)) {
textArea.setForeground(Color.blue);
}

if (e.getSource().equals(radiobuttongreen)) {
textArea.setForeground(Color.green);
}
}
/
对系统的剪辑板进行覆盖的方法
/
public static void setSysClipboardText(String writeMe) {
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable tText = new StringSelection(writeMe); // 覆盖系统剪切板
clip.setContents(tText, null);
}
/

  • 打开文件方法封装
    */
    public void Openfile() {
    JFileChooser fileChooser = new JFileChooser("d:\");
    // fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    // 这句用于硬性规定只能选择文件夹,而不能选择文件
    int returnVal = fileChooser.showOpenDialog(null);
    if (returnVal == JFileChooser.APPROVE_OPTION) { // 如果选择了对话框中的确定按钮,就执行以下操作
    File openfilePath = fileChooser.getSelectedFile();// 这个就是你选择的文件夹的路径
    try { // 流操作
    FileInputStream input = new FileInputStream(openfilePath); // FileInputStream文件输入流,将文件数据读出来
    BufferedReader breader = new BufferedReader(new InputStreamReader(input)); // BufferedReader字符输入流提高读出速率
    String tempreader = "";
    while ((tempreader = breader.readLine()) != null) { // 将读出的数据一行一行地写入程序(文本编辑器)的文本域中
    textArea.append(tempreader);
    }
    breader.close(); // 关闭字符输入流
    input.close(); // 关闭文件输入流
    } catch (FileNotFoundException e1) { // 异常处理
    e1.printStackTrace(); // printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。
    } catch (IOException e1) {
    e1.printStackTrace(); // printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。
    }
    } else {
    // 由于系统自己有取消的方法所以这里就不扩充了!
    }
    }
    /**
  • 保存文件方法封装
    */
    public void Savefile() {
    File savefilePath = new File("D:/javaeditortest/editor.txt"); // 保存文件的路径
    try {
    FileOutputStream output = new FileOutputStream(savefilePath); // FileOutputStream文件输出流,将数据写入文件
    BufferedWriter bwriter = new BufferedWriter(new OutputStreamWriter(output)); // BufferedWriter字符输出流提高写入速率
    for (String textareatemp : textArea.getText().split("\n")) { // 遍历,此处的textArea.getText().split("\n")可以当做一个数组,让后遍历处理,加上换行处理
    bwriter.write(textareatemp); // 将文本域的内容写入文件中
    bwriter.newLine();// 换行
    }
    bwriter.flush(); // 刷新字符输出流通道
    bwriter.close(); // 关闭字符输出流
    output.close(); // 关闭文件输出流
    JOptionPane.showMessageDialog(null, "已经保存成功啦!");
    } catch (FileNotFoundException e) {
    e.printStackTrace(); // printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。
    } catch (IOException e) {
    e.printStackTrace(); // printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。
    }
    }
    /**
  • 退出文本编辑器的方法封装
    */
    public void Exiteditor() {
    if (JOptionPane.showConfirmDialog(this, "退出系统?") == 0) {
    System.exit(0);
    }
    }
    public static void main(String[] args) {
    Editor02 editor = new Editor02();
    editor.setVisible(true);
    }
    }
    ————————————————
    版权声明:本文为CSDN博主「晨光--geeker」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_40436854/article/details/79824000
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!