使用Swing编写win7简易计算器7——菜单2

        昨天已经将菜单的样子制作出来了。但是现在只有一个样子,里面的功能还没有完成。今天主要要完成菜单的功能制作,主要是助记符、快捷键及事件操作。

        下面将分别介绍各种功能的实现。

        1. 助记符及快捷键

        助记符就是菜单及菜单项括号里的字母,这些字母的作用就是在菜单(菜单项)的上级节点被激活后,点一下字母即可打开该菜单(菜单项)。JMenu中使用setMnemonic()方法设置。而各种按键的设置则要用到KeyEvent类中的VK_XXX变量。比如,编辑菜单的助记符是E,则代码为:

JmEdit.setMnemonic(KeyEvent.VK_E);

        而设置快捷键则是setAccelerator()方法,参数是KeyStroke类,代表键盘上的组合键,这个组合键的初始化参数是虚拟键及修饰符的按位或组合。虚拟键指的是键盘上的普通按键,而修饰符则是键盘上的CTRL、ALT、SHIFT、META等几个按键。如果快捷键没有修饰符,则值为0;如果有一个则从ActionEvent类中选择XXX_MASK的变量,如果有多个则是这些变量的按位或,如

快捷键

代码

F1

setAccelerator(new KeyStroke(KeyEvent.VK_F1,0))

CTRL+C

setAccelerator(new KeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK))

ALT+SHIFT+D

setAccelerator(new KeyStroke(KeyEvent.VK_C, ActionEvent.ALT_MASK|ActionEvent.SHIFT_MASK))

        结果如下图所示。可以看见,在菜单项的右边出现了快捷键的组合名,在计算器打开的情况下按这些组合键即可使用相应菜单功能:


        2. 事件处理

        接下来就是事件处理了。因为我只是做个简易计算器,所以只实现了查看中的“退出”、编辑中的“复制”、“粘贴”,及帮助中的“关于计算器”。

        照例说说各部分的功能:

        退出:退出计算器。

        复制:将显示区的内容复制到剪贴板中。

        粘贴:将剪贴板中的内容粘贴到显示区。如果剪贴中的内容是数则复制到显示区中,否则从前往后粘贴最大限度的数的部分进去。如果字符串的第一个符号是小数点,则在前面补0。如剪贴板的内容是.24515saklfj,则显示区粘贴的内容是0.24515。

        关于计算器:弹出对话框,显示版权信息。

        退出比较简单,就是System.exit(0)。

        复制和粘贴需要用到Clipboard类和Transferable类,分别处理剪贴板及转换的相应动作。而粘贴好需要一些后处理的操作。

        关于则是用到JoptionPane来显示各种提示框,这里是一个信息会话框,因此用showMessageDialog。具体代码如下

        事件处理的方法如2中所说,addActionListener,不过因为菜单的事件响应差异较大,我使用了匿名内部类来设置监听器。

         / **

             * 设置监听器

             */

            public void addActionListener() {

               // 复制按钮的响应

               jtEdit[0].addActionListener(newActionListener() {

                   public voidactionPerformed(ActionEvent e) {

                      Button bts = new Button();

                      Clipboard clipboard =Toolkit.getDefaultToolkit()

                             .getSystemClipboard();

                      Transferable trandata = newStringSelection(bts.jt.getText());

                      clipboard.setContents(trandata,null);

                   }

               });

 

               // 粘贴按钮的响应

               jtEdit[1].addActionListener(newActionListener() {

                   public voidactionPerformed(ActionEvent e) {

                      Clipboard clipboard =Toolkit.getDefaultToolkit()

                             .getSystemClipboard();

                      Transferable clipT =clipboard.getContents(null);

                      Button bts = new Button();

                      if(clipT.isDataFlavorSupported(DataFlavor.stringFlavor)) {

                          try {

                             String clipContent =(String) clipT

                                    .getTransferData(DataFlavor.stringFlavor);

                             StringBuffer text = newStringBuffer();

                             for (int i = 0; i <clipContent.length(); i++) {

                                 if(clipContent.charAt(i) >= '0'

                                        &&clipContent.charAt(i) <= '9'

                                        ||clipContent.charAt(i) == '.') {

                                    if (i == 0&& clipContent.charAt(i) == '.') {

                                       text.append("0.");

                                    } else {

                                        text.append(String.valueOf(clipContent

                                               .charAt(i)));

                                    }

                                }

                             }

                             if (text.length() > 0)

                                 bts.jt.setText(text.toString());

                          } catch (Exception ex) {

                             ex.printStackTrace();

                          }

                      }

                   }

               });

 

               // 关于...菜单响应,显示对话框

               jtHelp[1].addActionListener(newActionListener() {

                   public voidactionPerformed(ActionEvent e) {

                      StringBuffer text = newStringBuffer("你大佬我 倾情制作\n").append(

                             "版本 1.0\n").append("版权所有 ?伟大公司保留一切权利 2013.2.23\n")

                             .append("本软件及其用户界面受所在国家/地区知识产权法律保护");

 

                      JOptionPane.showMessageDialog(JEdit,text, "关于计算器",

                     JOptionPane.PLAIN_MESSAGE);

                   }

               });

        最后看看“关于计算器”的会话框效果:


        到此,简易计算器的所有内容都已经编写完毕。我也对Java的图形化编程有了一定的了解。不过Swing中的内容还有许多,以后有机会再慢慢挖掘了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值