Java Swing实现具有基本功能的记事本程序

Java Swing实现具有基本功能的记事本

目前实现了:

文件

  • 新建
  • 打开
  • 保存
  • 退出前保存询问

编辑

  • 剪切
  • 复制
  • 粘贴
  • 清除
  • 撤销

格式

  • 字体选择
  • 字体颜色选择

帮助

  • 关于 (样式采用了css与html来描绘)

工具栏

图标形式的:

  • 保存
  • 复制
  • 粘贴
  • 剪切
  • 文字加粗
  • 文字斜体

底部状态栏

  • 文本字数实时统计
  • 日期显示
  • 编码显示(其实是假的哈哈)

右键弹出菜单

  • 复制
  • 粘贴
  • 剪切

工具栏和右键弹出菜单共享了一些图标,特别地,右键弹出菜单使用了鼠标监听器来实时报告鼠标的坐标,从而绘制弹出菜单。

图标我已经打包了,只要解压到源文件同一个目录下就行。

  • 链接:https://pan.baidu.com/s/14AI_dUeUPfaabdgCbOoVKg 密码:06rd

其中比较有意思的是,我模仿了一些笔记本应用,在文本区没有文字的时候将对应的功能项或图标设置成不可用,也就是灰色状态,直到键入了文本。粗体与斜体之间的可用性影响也写了个逻辑判断函数。

部分核心实现是搬运别人的代码,但是有点杂。。。。大部分框架是自己写的。

程序由三个文件组成:

  1. Launcher.java 主方法
  2. MyFrame.java 框架实现
  3. AboutDialog.java 单独用一个文件写「关于」对话框

主界面预览:

废话不多说,show the code:

Launcher.java :

public class Launcher{
    public static void main(String[] args){
        new MyFrame("Untitled");
    }
}

MyFrame.java :

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.undo.UndoManager;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
    ...................
    Created by HengyiYu
    ...................
 */
class MyFrame extends JFrame {
    private static final int DEFAULT_WIDTH = 700;             // 窗口默认宽度
    private static final int DEFAULT_HEIGHT = 450;            // 窗口默认高度
    private static final int DEFAULT_FONTSIZE = 20;           // 默认字体大小
    private JTextArea tv_area = null;                         // 多行文本框
    private JScrollPane s_pane = null;                        // 带滚动条的面板
    private JMenuBar mb = null;                               // 菜单栏
    private JToolBar toolBar1 = null;                         // 顶部工具栏
    private JToolBar toolBar2 = null;                         // 底部status栏
    private JMenu m_file = null;                              // 文件菜单
    private JMenu m_edit = null;                              // 编辑菜单
    private JMenu m_format = null;                            // 格式菜单
    private JMenu m_help = null;                              // 帮助菜单
    private JPopupMenu popupMenu = null;                      // 右键弹出式菜单
    private Icon toolBar_Save = null;                         // 工具栏保存图标
    private Icon toolBar_Cut = null;                          // 工具栏剪切图标
    private Icon toolBar_Copy = null;                         // 工具栏复制图标
    private Icon toolBar_Paste = null;                        // 工具栏粘贴图标
    private Icon statusBar_status = null;                     // 状态栏图标
    private Icon toolBar_more_font = null;                    // 工具栏字体图标
    private Icon m_help_icon = null;                          // 关于菜单项图标
    private JFileChooser chooser = null;                      // 文件选择对象
    private File file = null;                                 // 文件对象
    private UndoManager manager = null;                       // 撤销操作管理对象
    private String codestyle = "UTF-8";                       // 编码格式

    /*----------------文件菜单项---------------------*/
    private JMenuItem file_new = null;                        // 新建
    private JMenuItem file_open = null;                       // 打开
    private JMenuItem file_save = null;                       // 保存
    private JMenuItem file_exit = null;                       // 退出
    /*----------------文件菜单项---------------------*/

    /*----------------编辑菜单项---------------------*/
    private JMenuItem edit_cut = null;                        // 剪切
    private JMenuItem edit_copy = null;                       // 复制
    private JMenuItem edit_paste = null;                      // 粘贴
    private JMenuItem edit_clear = null;                      // 清空当前内容
    private JMenuItem edit_undo = null;                       // 撤销
    /*----------------编辑菜单项---------------------*/

    /*----------------格式菜单项---------------------*/
    private JMenuItem format_chooseFontColor = null;          // 选择字体颜色
    private JMenuItem format_chooseFont = null;               // 选择字体
    /*----------------格式菜单项---------------------*/

    /*----------------帮助菜单项---------------------*/
    private JMenuItem help_about = null;                      // 关于
    /*----------------帮助菜单项---------------------*/

    /*----------------工具栏项目---------------------*/
    private JButton button_save = null;
    private JButton button_copy = null;
    private JButton button_paste = null;
    private JButton button_cut = null;
    private JLabel moreOption = null;
    private JCheckBox check_bold = null;                      // 加粗选项
    private JCheckBox check_italic = null;                    // 斜体选项
    /*----------------工具栏项目---------------------*/

    /*----------------弹出菜单项---------------------*/
    private JMenuItem popCut = null;
    private JMenuItem popCopy = null;
    private JMenuItem popPaste = null;
    /*----------------弹出菜单项---------------------*/

    /*----------------状态栏项----------------------*/
    private JLabel label = null;
    private JLabel labelTime = null;
    private JLabel labelCodeStyle = null;
    /*----------------状态栏项----------------------*/

    public MyFrame(String title){
        super(title);   //窗体标题
        init();
        registerListener();
    }

    //初始化相关组件
    private void init(){
        tv_area = new JTextArea();                            // 创建一个多行文本框
        tv_area.setFont(new Font("Courier Prime", Font.PLAIN, 18));
        tv_area.setCaretColor(Color.GREEN);                   // 光标颜色
        tv_area.setSelectedTextColor(Color.ORANGE);           // 选中字体颜色
        tv_area.setSelectionColor(Color.CYAN);                // 选中背景颜色
        tv_area.setLineWrap(true);                            // 自动换行
        tv_area.setTabSize(4);
        tv_area.getDocument().
                addUndoableEditListener(manager);             // 设置文本框编辑监听(可撤销)
        s_pane = new JScrollPane(tv_area,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);  // 创建一个滚动条面板
        s_pane.setOpaque(false);                              // 设置面板透明
        s_pane.getViewport().setOpaque(false);
        mb = new JMenuBar(); //初始化菜单栏
        manager = new UndoManager();                          // 创建一个撤销管理对象
        Container cpan = this.getContentPane();               // 用Container对象获取当前框架的内容面板
        cpan.add(s_pane,BorderLayout.CENTER);                 // 将多行文本框添加到面板中央
        this.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);           // 设置窗体大小

        /*----------------设置图标----------------------*/
        toolBar_Save = new ImageIcon("src/ToolBar_Save.png");
        toolBar_Cut = new ImageIcon("src/ToolBar_Cut.png");
        toolBar_Copy = new ImageIcon("src/ToolBar_Copy.png");
        toolBar_Paste = new ImageIcon("src/ToolBar_Paste.png");
        toolBar_more_font = new ImageIcon("src/more_font.png");
        statusBar_status = new ImageIcon("src/statusBar.png");
        m_help_icon = new ImageIcon("src/info.png");
        /*----------------设置图标----------------------*/

        /*----------------文件菜单----------------------*/
        m_file = new JMenu("文件(F)");
        m_file.setMnemonic(‘F‘);
        file_new = new JMenuItem("新建(N)");
        file_new.setAccelerator(KeyStroke.getKeyStroke("ctrl N"));
        file_new.setMnemonic(‘N‘);
        file_open = new JMenuItem("打开(O)");
        file_open.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));
        file_save = new JMenuItem("保存(S)");
        file_save.setEnabled(false);
        file_save.setAccelerator(KeyStroke.getKeyStroke("ctrl S"));
        file_exit = new JMenuItem("退出");
        m_file.add(file_new);
        m_file.add(file_open);
        m_file.add(file_save);
        m_file.addSeparator();
        m_file.add(file_exit);
        /*----------------文件菜单----------------------*/

        /*----------------编辑菜单----------------------*/
        m_edit = new JMenu("编辑(E)");
        m_file.setMnemonic(‘E‘);
        edit_cut = new JMenuItem("剪切(X)");
        edit_cut.setEnabled(false);
        edit_cut.setAccelerator(KeyStroke.getKeyStroke("ctrl X"));
        edit_copy = new JMenuItem("复制(C)");
        edit_copy.setEnabled(false);
        edit_copy.setAccelerator(KeyStroke.getKeyStroke("ctrl C"));
        edit_paste = new JMenuItem("粘贴(V)");
        edit_paste.setAccelerator(KeyStroke.getKeyStroke("ctrl V"));
        edit_clear = new JMenuItem("清除");
        edit_clear.setEnabled(false);
        edit_undo = new JMenuItem("撤销(Z)");
        edit_undo.setAccelerator(KeyStroke.getKeyStroke("ctrl Z"));
        m_edit.add(edit_cut);
        m_edit.add(edit_copy);
        m_edit.add(edit_paste);
        m_edit.addSeparator();
        m_edit.add(edit_clear);
        m_edit.addSeparator();
        m_edit.add(edit_undo);
        /*----------------编辑菜单----------------------*/

        /*----------------格式菜单----------------------*/
        m_format = new JMenu("格式(M)");
        m_file.setMnemonic(‘M‘);
        format_chooseFont = new JMenuItem("字体选择");
        format_chooseFontColor = new JMenuItem("字体颜色");
        m_format.add(format_chooseFont);
        m_format.add(format_chooseFontColor);
        /*----------------格式菜单----------------------*/

        /*----------------帮助菜单----------------------*/
        m_help = new JMenu("帮助(H)");
        m_file.setMnemonic(‘H‘);
        help_about = new JMenuItem("关于",m_help_icon);
        m_help.add(help_about);
        /*----------------帮助菜单----------------------*/

        /*----------------右键菜单----------------------*/
        popupMenu = new JPopupMenu();
        popCut = new JMenuItem("剪切",toolBar_Cut);
        popCopy = new JMenuItem("复制",toolBar_Copy);
        popPaste = new JMenuItem("粘贴",toolBar_Paste);
        popupMenu.add(popCut);
        popupMenu.add(popCopy);
        popupMenu.add(popPaste);
        /*----------------右键菜单----------------------*/

        mb.add(m_file);                                       // 菜单栏添加相应菜单file
        mb.add(m_edit);                                       // 菜单栏添加相应菜单edit
        mb.add(m_format);                                     // 菜单栏添加相应菜单format
        mb.add(m_help);                                       // 菜单栏添加相应菜单help

        /*----------------工具栏-----------------------*/
        toolBar1 = new JToolBar();
        toolBar1.setMargin(new Insets(1,1,1,1));
                                                              // 设置按钮间距
        button_save = new JButton(toolBar_Save);
        button_save.setEnabled(false);
        button_save.setToolTipText("保存当前内容");
        button_copy = new JButton(toolBar_Copy);
        button_copy.setEnabled(false);
        button_copy.setToolTipText("复制选中内容");
        button_paste = new JButton(toolBar_Paste);
        button_paste.setToolTipText("粘贴");
        button_cut = new JButton(toolBar_Cut);
        button_cut.setEnabled(false);
        button_cut.setToolTipText("剪切选中内容");
        moreOption = new JLabel("更多-->",toolBar_more_font,SwingConstants.CENTER);
        check_bold = new JCheckBox("<html><p style=\"font-weight:bold;\">加粗</p><html>");
        check_bold.setEnabled(false);
        check_bold.setSelected(false);
        check_italic = new JCheckBox("<html><i>斜体</i></html>");
        check_italic.setEnabled(false);
        check_italic.setSelected(false);
        toolBar1.addSeparator();
        toolBar1.add(button_save);
        toolBar1.addSeparator(new Dimension(20,2));
        toolBar1.add(button_copy);
        toolBar1.addSeparator(new Dimension(20,2));
        toolBar1.add(button_paste);
        toolBar1.addSeparator(new Dimension(20,2));
        toolBar1.add(button_cut);
        toolBar1.addSeparator(new Dimension(290,2));
        toolBar1.add(moreOption);
        toolBar1.add(check_bold);
        toolBar1.add(check_italic);
        toolBar1.setFloatable(false);

        /*----------------工具栏-----------------------*/

        /*----------------状态栏-----------------------*/
        toolBar2 = new JToolBar();
        toolBar2.setFloatable(false);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        label = new JLabel("当前字数:0",statusBar_status,SwingConstants.CENTER);
        labelTime = new JLabel("日期: "+sdf.format(new Date()));
        labelCodeStyle = new JLabel("编码: "+codestyle);

        toolBar2.add(label);
        toolBar2.addSeparator(new Dimension(180,5));
        toolBar2.add(labelTime);
        toolBar2.addSeparator(new Dimension(180,5));
        toolBar2.add(labelCodeStyle);
        /*----------------状态栏-----------------------*/

        this.add(toolBar1,BorderLayout.NORTH);                // 将工具栏添加到框架中
        this.add(toolBar2,BorderLayout.SOUTH);

        this.setJMenuBar(mb);                                 // 将菜单栏添加到框架中
        this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
                                                              // 设置关闭时动作
        Toolkit kit = Toolkit.getDefaultToolkit();            // 获取工具包
        Dimension screenSize = kit.getScreenSize();           // Dimension对象获取尺寸
        int screenWidth = screenSize.width;                   // 获取当前屏幕宽度
        int screenHeight = screenSize.height;                 // 获取当前屏幕高度
        int windowsWidth = this.getWidth();                   // 获取当前窗体宽度
        int windowsHeight = this.getHeight();                 // 获取当前窗体高度
        this.setLocation((screenWidth-windowsWidth)/2,
                (screenHeight-windowsHeight)/2);           // 设置窗口位置
        this.setVisible(true);                                // 设置窗体可见
    }

    //监听器注册区
    private void registerListener(){
        tv_area.addMouseListener(new MouseAdapter() {         // 为文本框添加鼠标监听器
            @Override
            public void mousePressed(MouseEvent e) {
                maybeShowPopup(e);
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                maybeShowPopup(e);
            }
        });

        tv_area.getDocument().addDocumentListener(new DocumentListener() {
            @Override                                         // 监听文本区改变
            public void insertUpdate(DocumentEvent e) {
                isItemsAvalible();                            // 一旦文本有改变就设置各按钮的可用性
                changeTextLengthStatus();                     // 实时显示文本字数
            }
            @Override
            public void removeUpdate(DocumentEvent e) {
                isItemsAvalible();                            // 一旦文本有改变就设置各按钮的可用性
                changeTextLengthStatus();                     // 实时显示文本字数
            }
            @Override
            public void changedUpdate(DocumentEvent e) {
                changeTextLengthStatus();                     // 实时显示文本字数
                isItemsAvalible();                            // 一旦文本有改变就设置各按钮的可用性
            }
        });
        file_new.addActionListener(e -> newFile());           // 注册新建文件监听器
        file_open.addActionListener(e -> openFile());         // 注册打开文件监听器
        file_save.addActionListener(e -> saveFile());         // 注册保存文件监听器
        file_exit.addActionListener(e -> exit());             // 注册退出程序监听器
        edit_clear.addActionListener(e -> clearAll());
        edit_undo.addActionListener(e -> undo());
        edit_cut.addActionListener(e -> tv_area.cut());
        edit_copy.addActionListener(e -> tv_area.copy());
        edit_paste.addActionListener(e -> tv_area.paste());
        format_chooseFont.addActionListener(e -> setTextFont());
        format_chooseFontColor.addActionListener(e -> setTextColor());
        help_about.addActionListener(e -> new AboutDialog(MyFrame.this,
                "About-NotePad",true));
        button_save.addActionListener(e -> saveFile());
        button_copy.addActionListener(e -> tv_area.copy());
        button_paste.addActionListener(e -> tv_area.paste());
        button_cut.addActionListener(e -> tv_area.cut());
        check_italic.addActionListener(e -> checkBox_setFont());
        check_bold.addActionListener(e -> checkBox_setFont());
        popCut.addActionListener(e -> tv_area.cut());
        popCopy.addActionListener(e -> tv_area.copy());
        popPaste.addActionListener(e -> tv_area.paste());
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                String exitMessage = "需要保存键入的文本吗?";
                if(tv_area.getText().equals(""))
                    System.exit(0);
                else{
                    if(JOptionPane.showConfirmDialog(null, exitMessage,"提示",
                            JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)==JOptionPane.YES_OPTION){
                        saveFile();
                        System.exit(0);
                    }else
                        System.exit(0);
                }
            }
        });
    }

    private void newFile(){                                   // 新建文件触发函数
        if(!tv_area.getText().equals("")){
            int res = JOptionPane.showConfirmDialog
                    (null,"当前内容未保存,需要保存吗?",
                            "info",JOptionPane.YES_NO_OPTION);   // 储存选择结果
            if(res==JOptionPane.YES_OPTION){
                saveFile();
                tv_area.setText("");
                this.setTitle("untitled");
                file = null;
            }else{
                tv_area.setText("");                          // 取消则清空页面
                this.setTitle("untitled");
                file = null;
            }
        }
    }

    private void clearAll(){                                  // 清空当前页面触发函数
        tv_area.setText("");
    }          // 清空页面触发函数

    private void openFile(){                                  // 打开文件触发函数
        try {
            chooser = new JFileChooser("/Users/1kasshole/Desktop/");
                                                              // 设置打开时的默认目录
            chooser.setFileFilter(new filter());              // 设置格式过滤器
            int result = chooser.showOpenDialog(null);
            if (result == JFileChooser.APPROVE_OPTION) {      // 点击打开按钮
                file = chooser.getSelectedFile();
                int length = (int) file.length();
                FileReader reader = new FileReader(file);
                char[] ch = new char[length];
                reader.read(ch);                              // 将文件读进char数组
                reader.close();
                tv_area.setText(new String(ch).trim());       // 删除字符串的头尾空白符
                setTitle(file.getName());                     // 框架标题设置为文件名
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }

    private void saveFile(){                                  // 文件保存触发函数
        if (file == null)
            try {
                chooser = new JFileChooser(
                        "/Users/1kasshole/Desktop/");
                chooser.setFileFilter(new filter());
                int result = chooser.showSaveDialog(null);
                if (result == JFileChooser.APPROVE_OPTION) {
                    File selectfile =
                            chooser.getSelectedFile();        // 获得文件
                    String end = chooser.getFileFilter().getDescription();
                                                              // 获得被选中的过滤器中的文件扩展名
                    File newFile;
                    if (selectfile.getAbsolutePath().toUpperCase().endsWith(end.toUpperCase())) {
                        // 如果文件是以选定扩展名结束的,则使用原名
                        newFile = selectfile;
                    } else {                                  // 否则加上选定的扩展名
                        newFile = new File(selectfile.getAbsolutePath()+ end);
                    }
                    try {
                        if (!newFile.exists()) {
                            newFile.createNewFile();
                        }
                        FileWriter writer = new FileWriter(newFile);
                        char[] arry = tv_area.getText().toCharArray();
                        writer.write(arry);
                        writer.flush();
                        writer.close();
                        setTitle(newFile.getName());
                        file = newFile;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e);
            }
        else
            try {
                FileWriter writer = new FileWriter(file);
                char[] arry = tv_area.getText().toCharArray();
                writer.write(arry);
                writer.flush();
                writer.close();
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e);
            }
    }

    private void undo(){                                      // 撤销触发函数
        if (manager.canUndo()){
            manager.undo();
        }
    }

    private void exit(){                                      // 退出程序触发函数
        newFile();
        System.exit(0);
    }

    private void setTextFont(){                               // 选择字体触发函数
        try{
            GraphicsEnvironment ge = GraphicsEnvironment
                    .getLocalGraphicsEnvironment();
                                                              // 获取系统字体
            JList<String> fontNames = new JList<>(ge.getAvailableFontFamilyNames());
            int response = JOptionPane.showConfirmDialog(null,
                    new JScrollPane(fontNames), "请选择字体 ( 默认: Courier Prime )",
                    JOptionPane.OK_CANCEL_OPTION);
            Object selectedFont = fontNames.getSelectedValue();
            if (response == JOptionPane.OK_OPTION && selectedFont != null)
                tv_area.setFont(new Font(fontNames.getSelectedValue(), Font.PLAIN, DEFAULT_FONTSIZE));
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    private void setTextColor(){                               // 字体颜色选择触发函数
        Color color = JColorChooser.showDialog(null, "**请选择字体颜色**",
                Color.WHITE);
        tv_area.setForeground(color);
    }

    // 文件格式过滤
    private class filter extends javax.swing.filechooser.FileFilter {
        public boolean accept(File file) {
            String name = file.getName();
            name.toLowerCase();
            return name.endsWith(".txt") || file.isDirectory();
        }

        public String getDescription() {
            return ".txt";
        }
    }

    // 监视系统剪切板
    private boolean isClipboardEmpty(){
        Transferable transferable = Toolkit.getDefaultToolkit().
                getSystemClipboard().getContents(null);
                                                               // 获取内容
        if(transferable!=null && transferable.isDataFlavorSupported(DataFlavor.stringFlavor)){
            try{
                return false;
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return true;
    }

    private void maybeShowPopup(MouseEvent e){                 // 监听鼠标
        if(e.isPopupTrigger()){
            popupMenu.show(e.getComponent(),e.getX(),e.getY());
        }
    }

    private void changeTextLengthStatus(){                     // 文本监听
        String content = tv_area.getText().trim();
        label.setText("当前字数:"+content.length());
    }

    private void isItemsAvalible(){
        String content = tv_area.getText();
        if(content.equals("")){
            edit_cut.setEnabled(false);
            edit_clear.setEnabled(false);
            edit_copy.setEnabled(false);
            file_save.setEnabled(false);
            button_save.setEnabled(false);
            button_copy.setEnabled(false);
            button_cut.setEnabled(false);
            check_bold.setEnabled(false);
            check_italic.setEnabled(false);
        }else{
            file_save.setEnabled(true);
            edit_cut.setEnabled(true);
            edit_clear.setEnabled(true);
            edit_copy.setEnabled(true);
            button_save.setEnabled(true);
            button_copy.setEnabled(true);
            button_cut.setEnabled(true);
            check_bold.setEnabled(true);
            check_italic.setEnabled(true);
        }
    }

    private void checkBox_setFont(){                           // 复选框监听
        if(check_bold.isSelected()){
            check_italic.setEnabled(false);
            tv_area.setFont(new Font(tv_area.getFont().getName(),Font.BOLD,DEFAULT_FONTSIZE));
        }
        if(check_italic.isSelected()){
            check_bold.setEnabled(false);
            tv_area.setFont(new Font(tv_area.getFont().getName(),Font.ITALIC,DEFAULT_FONTSIZE));
        }
        if(!check_bold.isSelected()){
            check_italic.setEnabled(true);
            if(!check_italic.isSelected())
                tv_area.setFont(new Font(tv_area.getFont().getName(),Font.PLAIN,DEFAULT_FONTSIZE));
        }
        if(!check_italic.isSelected()){
            check_bold.setEnabled(true);
            if(!check_bold.isSelected())
                tv_area.setFont(new Font(tv_area.getFont().getName(),Font.PLAIN,DEFAULT_FONTSIZE));
        }
    }
}

AboutDialog.java :

import javax.swing.*;
import java.awt.*;
/*
    ...................
    Created by HengyiYu
    ...................
 */
class AboutDialog extends JDialog {
    private static final int ABOUT_WIDTH = 300;               // 窗口默认宽度
    private static final int ABOUT_HEIGHT = 220;              // 窗口默认高度
    private Icon about = new ImageIcon("src/Help_About.png");
    private JLabel desc = null;                               // 文本标签
    private JPanel panel = null;                              // 内容面板
    private JButton btn = null;                               // 按钮
    public AboutDialog(Frame frame, String title, boolean modal){
        super(frame,title,modal);                             // 将对话框放进当前框架,设置标题和模态
        init();
        registerListener();
    }
    private void init(){
        desc = new JLabel();                                  // 新建文本标签
        desc.setText("<html>HAVE FUN~ <font size=\"4px\"><u><a href=https://www.oracle.com> --- Powered by ORACLE --- </a></u></font><br><br>Supports .txt format only<br><br><strong>A BETA VERSION BY HENGYI YU</strong></html>");
        desc.setHorizontalAlignment(JLabel.CENTER);           // 设置文本标签位置
        panel = new JPanel();                                 // 新建内容面板
        btn = new JButton();
        btn.setIcon(about);
        panel.add(btn);
        this.add(desc);                                       // 文本默认在边界管理器中央
        this.add(panel,BorderLayout.SOUTH);                   // 将面板放在便捷管理器下方
        this.setSize(ABOUT_WIDTH,ABOUT_HEIGHT);               // 设置对话框大小
    }
    private void registerListener(){
        btn.addActionListener(e->{
            AboutDialog.this.dispose();                             // 退出对话框
        });
        Toolkit kit = Toolkit.getDefaultToolkit();            // 获取工具包
        Dimension screenSize = kit.getScreenSize();           // Dimension对象获取尺寸
        int screenWidth = screenSize.width;                   // 获取当前屏幕宽度
        int screenHeight = screenSize.height;                 // 获取当前屏幕高度
        int dialogWidth = this.getWidth();                    // 获取当前对话框宽度
        int dialogHeight = this.getHeight();                  // 获取当前对话框高度
        this.setLocation((screenWidth-dialogWidth)/2,
                (screenHeight-dialogHeight)/2);            // 设置窗口位置
        this.setVisible(true);                                // 设置可见
    }
}

原文地址:https://www.cnblogs.com/1Kasshole/p/9256914.html

时间: 2024-08-04 09:12:51

Java Swing实现具有基本功能的记事本程序的相关文章

Java Swing 如何实现记事本中“编辑”菜单下的各项功能

这篇文字将要学习以下知识点: 1.如何给JButton按钮添加鼠标点击事件监听器 #1.addMouseListener(MouseListener l)  给JButton添加一个鼠标点击监听器l 2.文本区控件JTextArea 中的方法(剪切,复制,粘贴,删除,全选  功能的实现) #1.cut()  先在文本区控件中选中一段文字,然后调用此方法就可以将文字#剪切#到剪贴板(效果和windows中的剪切一模一样). #2.copy() 先在文本区控件中选中一段文字,然后调用此方法就可以将文

Atitit。D&amp;D drag&amp;drop拖拽功能c#.net java swing的对比与实现总结

Atitit.D&D drag&drop拖拽功能c#.net java swing的对比与实现总结 1. 实现一个D&D操作一般包括三个步骤: 1 2. .net黑头的拖曳机制.必须有DragEnter事件(单独写DragDrop事件是不会具有拖拽功能的) 2 3. ---java黑头的拖曳..必须有DragEnter事件(单独写 Drop事件是不会具有拖拽功能的) 2 4. 代码 3 5. 参考 5 1. 实现一个D&D操作一般包括三个步骤: 首先实现一个拖拽源,这个拖拽

atitit.D&amp;D drag&amp;drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结

atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结 1. DND的操作流程 1 2. Html5 注解事件 document.dragover >>preventDefault 1 3. 代码(js) 1 4. C++ 实现拖曳 2 5. QT拖拽功能简介 - pcsuite的专栏 - 博客频道 - CSDN.NET.htm 2 1. DND的操作流程 Dragenter 事件::更改提示的颜色

java swing开发的图像生成器demo实例源代码下载,实现绘制图像,截屏功能。

一个类似于画画的javase程序 绘制图形 原文:java swing开发的图像生成器demo实例源代码下载,实现绘制图像,截屏功能. java源代码下载地址:http://www.zuidaima.com/share/1550463330028544.htm 获取屏幕 打开调色板

【小型系统】抽奖系统-使用Java Swing完成

一.需求分析 1. 显示候选人照片和姓名. 2. 可以使用多种模式进行抽奖,包括一人单独抽奖.两人同时抽奖.三人同时抽奖. 3. 一个人可以在不同的批次的抽奖中获取一.二.三等奖,但是不能在同一批次抽奖中获取多个奖项. 二.系统总体框架 系统需求比较简单,采用Java Swing技术可以很好的实现,系统的总体类框架图如下 说明:基于主要的三个类就可以完成所需要的功能,Frame有Panel类型与MouseAdapter类型的成员,Panel主要用户存放具体的控件和绘制相应的信息,MouseAda

抽奖系统-使用Java Swing完成

一.需求分析 1. 显示候选人照片和姓名. 2. 可以使用多种模式进行抽奖,包括一人单独抽奖.两人同时抽奖.三人同时抽奖. 3. 一个人可以在不同的批次的抽奖中获取一.二.三等奖,但是不能在同一批次抽奖中获取多个奖项. 二.系统总体框架 系统需求比较简单,采用Java Swing技术可以很好的实现,系统的总体类框架图如下 说明:基于主要的三个类就可以完成所需要的功能,Frame有Panel类型与MouseAdapter类型的成员,Panel主要用户存放具体的控件和绘制相应的信息,MouseAda

atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform

atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform 1. Absoluti 布局(经常使用) 1 2. Flow 布局(不经常使用) 1 3. BorderLayout (不经常使用) 1 4. BoxLayout( html默认布局) 2 5. CardLayout (tab 布局) 2 6. GridLayout 3 7. GridBagLayout 3 8. Fixed 定位(不经常使用) 3

Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现

Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现 1. 建立悬浮窗口引用代码 1 1.1. 定义悬浮窗口,设置this主窗口引用,是为了在悬浮窗口中双击可缩小还还原主窗口.以及悬浮窗口右键菜单"显示主界面"中需要还原主窗 1 1.2. //设置主窗口关闭时,先关闭悬浮窗口.and系统托盘 1 1.3. 注入系统托盘图标,退出的时候儿也退出系统托盘 2 2. 悬浮窗口结构and重大的点 2 2.1. 要去掉标题栏: 2 2.2. Opa

swing实现代码助手功能

实现思路: 定义了个快捷键ctrl+/ ,当按此键时,会出现一个弹出窗口,采用JWINDOW来实现. 选择代码段便用了JList来实现. 下面直接上代码. package org.swan.mybatis.ui.common; import java.awt.Color; import java.awt.Component; import java.awt.Point; import java.awt.Window; import java.awt.event.*; import java.ut