最新帖子 精华区 社区服务 会员列表 统计排行
主题 : 模仿记事本的菜单栏
mrsoft 离线
级别: 菜鸟
UID: 44315
精华: 0
发帖: 22
金币: 0 个
银元: 32 个
铜钱: 380 个
技术分: 0 个
在线时间: 4(时)
注册时间: 2017-01-09
最后登录: 2017-04-27
楼主  发表于: 2017-03-30   

模仿记事本的菜单栏

Windows操作系统中,自带了一款简单的文本编辑工具——记事本。记事本主要由菜单栏和文本区两部分组成。菜单栏实现了各种常用的功能,文本区用于让用户输入文本。本实例将实现一个类似记事本的菜单栏。实例运行效果如图



Swing中使用菜单的第一步是创建一个菜单栏保存各个菜单,并将菜单栏添加到框架上。代码如下:

复制代码
  1. JMenuBar menuBar = new JMenuBar();

    setJMenuBar(menuBar);


第二步开始创建各个菜单及其菜单项,并将菜单项添加到菜单中。为了分类,可以使用分隔符将功能相近的菜单项分隔后添加到菜单中。代码如下:

复制代码
  1. JMenu fileMenu = new JMenu("\u6587\u4EF6(F)");

    menuBar.add(fileMenu);

    JMenuItem newMenuItem = new JMenuItem("\u65B0\u5EFA(N)");

    fileMenu.add(newMenuItem);


提示菜单栏是可以添加到框架的任意位置的,按照惯例,通常将菜单栏添加到容器的顶部。

编写Notepad类,该类继承自JFrame。在其构造方法中,增加了一个菜单栏。在菜单栏中增加了Windows的记事本中的各个菜单项。代码如下:

复制代码
  1. package com.mingrisoft.jmenu;

     

    import java.awt.BorderLayout;

    import java.awt.EventQueue;

     

    import javax.swing.JFrame;

    import javax.swing.JPanel;

    import javax.swing.border.EmptyBorder;

    import javax.swing.UIManager;

    import javax.swing.JMenuBar;

    import javax.swing.JMenu;

    import javax.swing.JMenuItem;

    import javax.swing.JScrollPane;

    import javax.swing.JTextArea;

    import javax.swing.JSeparator;

    import java.awt.Font;

     

    public class Notepad extends JFrame {

     

        /**

         *

         */

        private static final long serialVersionUID = 5927958872707427777L;

        private JPanel contentPane;

     

        /**

         * Launch the application.

         */

        public static void main(String[] args) {

            try {

                UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

            } catch (Throwable e) {

                e.printStackTrace();

            }

            EventQueue.invokeLater(new Runnable() {

                public void run() {

                    try {

                        Notepad frame = new Notepad();

                        frame.setVisible(true);

                    } catch (Exception e) {

                        e.printStackTrace();

                    }

                }

            });

        }

     

        /**

         * Create the frame.

         */

        public Notepad() {

            setTitle("\u6A21\u4EFF\u8BB0\u4E8B\u672C\u7684\u83DC\u5355\u9879");

            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            setBounds(100, 100, 450, 300);

     

            JMenuBar menuBar = new JMenuBar();

            setJMenuBar(menuBar);

     

            JMenu fileMenu = new JMenu("\u6587\u4EF6(F)");

            fileMenu.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            menuBar.add(fileMenu);

     

            JMenuItem newMenuItem = new JMenuItem("\u65B0\u5EFA(N)");

            newMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            fileMenu.add(newMenuItem);

     

            JMenuItem openMenuItem = new JMenuItem("\u6253\u5F00(O)...");

            openMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            fileMenu.add(openMenuItem);

     

            JMenuItem saveMenuItem = new JMenuItem("\u4FDD\u5B58(S)");

            saveMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            fileMenu.add(saveMenuItem);

     

            JMenuItem saveAsMenuItem = new JMenuItem("\u53E6\u5B58\u4E3A(A)...");

            saveAsMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            fileMenu.add(saveAsMenuItem);

     

            JSeparator separator1 = new JSeparator();

            fileMenu.add(separator1);

     

            JMenuItem pageSetMenuItem = new JMenuItem("\u9875\u9762\u8BBE\u7F6E(U)...");

            pageSetMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            fileMenu.add(pageSetMenuItem);

     

            JMenuItem printMenuItem = new JMenuItem("\u6253\u5370(P)...");

            printMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            fileMenu.add(printMenuItem);

     

            JSeparator separator2 = new JSeparator();

            fileMenu.add(separator2);

     

            JMenuItem exitMenuItem = new JMenuItem("\u9000\u51FA(X)");

            exitMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            fileMenu.add(exitMenuItem);

     

            JMenu editMenu = new JMenu("\u7F16\u8F91(E)");

            editMenu.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            menuBar.add(editMenu);

     

            JMenuItem undoMenuItem = new JMenuItem("\u64A4\u9500(U)");

            undoMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(undoMenuItem);

     

            JSeparator separator3 = new JSeparator();

            editMenu.add(separator3);

     

            JMenuItem cutMenuItem = new JMenuItem("\u526A\u5207(T)");

            cutMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(cutMenuItem);

     

            JMenuItem copyMenuItem = new JMenuItem("\u590D\u5236(C)");

            copyMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(copyMenuItem);

     

            JMenuItem pasteMenuItem = new JMenuItem("\u7C98\u8D34(P)");

            pasteMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(pasteMenuItem);

     

            JMenuItem deleteMenuItem = new JMenuItem("\u5220\u9664(L)");

            deleteMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(deleteMenuItem);

     

            JSeparator separator4 = new JSeparator();

            editMenu.add(separator4);

     

            JMenuItem findMenuItem = new JMenuItem("\u67E5\u627E(F)...");

            findMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(findMenuItem);

     

            JMenuItem findNextMenuItem = new JMenuItem("\u67E5\u627E\u4E0B\u4E00\u4E2A(N)");

            findNextMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(findNextMenuItem);

     

            JMenuItem replaceMenuItem = new JMenuItem("\u66FF\u6362(R)...");

            replaceMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(replaceMenuItem);

     

            JMenuItem gotoMenuItem = new JMenuItem("\u8F6C\u5230(G)...");

            gotoMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(gotoMenuItem);

     

            JSeparator separator5 = new JSeparator();

            editMenu.add(separator5);

     

            JMenuItem allMenuItem = new JMenuItem("\u5168\u9009(A)");

            allMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(allMenuItem);

     

            JMenuItem dateMenuItem = new JMenuItem("\u65F6\u95F4/\u65E5\u671F(D)");

            dateMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            editMenu.add(dateMenuItem);

     

            JMenu formatMenu = new JMenu("\u683C\u5F0F(O)");

            formatMenu.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            menuBar.add(formatMenu);

     

            JMenuItem wrapMenuItem = new JMenuItem("\u81EA\u52A8\u6362\u884C(W)");

            wrapMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            formatMenu.add(wrapMenuItem);

     

            JMenuItem FontMenuItem = new JMenuItem("\u5B57\u4F53(F)...");

            FontMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            formatMenu.add(FontMenuItem);

     

            JMenu viewMenu = new JMenu("\u67E5\u770B(V)");

            viewMenu.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            menuBar.add(viewMenu);

     

            JMenuItem statusMenuItem = new JMenuItem("\u72B6\u6001\u680F(S)");

            statusMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            viewMenu.add(statusMenuItem);

     

            JMenu helpMenu = new JMenu("\u5E2E\u52A9(H)");

            helpMenu.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            menuBar.add(helpMenu);

     

            JMenuItem helpMenuItem = new JMenuItem("\u67E5\u770B\u5E2E\u52A9(H)");

            helpMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            helpMenu.add(helpMenuItem);

     

            JSeparator separator6 = new JSeparator();

            helpMenu.add(separator6);

     

            JMenuItem aboutMenuItem = new JMenuItem("\u5173\u4E8E\u8BB0\u4E8B\u672C(A)");

            aboutMenuItem.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            helpMenu.add(aboutMenuItem);

            contentPane = new JPanel();

            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

            contentPane.setLayout(new BorderLayout(0, 0));

            setContentPane(contentPane);

     

            JScrollPane scrollPane = new JScrollPane();

            contentPane.add(scrollPane, BorderLayout.CENTER);

     

            JTextArea textArea = new JTextArea();

            textArea.setFont(new Font("微软雅黑", Font.PLAIN, 16));

            textArea.setWrapStyleWord(true);

            scrollPane.setViewportView(textArea);

        }

     

    }


提示setFont()是在JComponent类中定义的,因此可以在其子类中使用。

心法领悟:启动和禁用菜单项。

有时候,有些功能在特定的场合才能使用。例如,如果文本域中没有文本,就没有保存的必要。此时可以禁用保存菜单。当用户输入文本时再启动。使用菜单项的setEnabled()方法就可以实现这个功能。此外,还可以增加一些助记符和快捷键,方便用户的使用。

描述
快速回复

如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
认证码:

验证问题:
printf("%d", 43)
按"Ctrl+Enter"直接提交