JavaGUI:多功能计算器(四)–Swing实现双语悬停提示(源码升级说明)

【背景提示】

AWT(Abstract Windowing Toolkit):
抽象窗口工具包AWT是Java的平台独立的窗口系统,图形和用户界面器件工具包。
AWT是Java基础类 (JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。
最新的GUI接口称为Swing:
Swing扩展了AWT,程序开发人员可以利用Swing生成独立于平台的GUI对象。

一、简单升级:

前文《JavaGUI:多功能计算器(一)~(三)》都仅使用了AWT,为了实现按钮和菜单的双语悬停提示功能,必须使用Swing。
因为Swing是在AWT基础上部分继承与扩展而来,其功能集包含了AWT的常用命令及参数格式。故仅需经过两步简单操作便可将上一版程序切换到Swing(参考下面源码):
1.导入Swing,并将相关类名前简单加J替换,便可将AWT调用转到SwingGUI库。
2.在按钮和菜单的创建模块中简单增加双语悬停提示语句,即可实现鼠标悬停提示效果。

二、部分源码:

(v0.40仅贴出改动部分,其余参考前文v0.34完整源码)

1. 修改类名的部分:(导入Swing&修改类名)

//----------------------------------------------------------------------------*/
//TODO v0.40;20221230;用JavaSwing实现双语定制多功能计算器(AWT2Swing直接升级版)
//版本说明:本版程序由上一版AWT-DbY计算器v0.34直接升级到SwingGUI;子版本号+1;
//文章标签: java gui awt swing eclipsepackage calculator;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;//以下类名简单加J替换:(AWT2Swing直接升级版)
//import javax.swing.JButton;
//import javax.swing.JTextArea;
//import javax.swing.JTextField;
//import javax.swing.JDialog;
//import javax.swing.JFrame;
//import javax.swing.JLabel;
//import javax.swing.JMenu;
//import javax.swing.JMenuBar;
//import javax.swing.JPanel;public class Calculate
{//v0.34;20221005;总体布局;完整版3位版本号;简易版仅需1位版本号;      //v0.40;20221230(AWT2Swing直接升级版);//计算变量;double       num1,num2,mem;              //操作数1/2,中间记忆mem,均为double;boolean  isNum;                      //数字拼接标志位,转存后失效;String        Oper;                       //二元计算操作符,依赖"="计算;JTextField   tResult;                    //显示结果;单行可编辑,由C按键复制后清空;JTextArea   tRecord;                    //显示记录;多行可编辑复制;用CR按键清空;JTextField  tNum1;                      //文本行,操作数num1跟踪窗口;JTextField  tOper;                      //文本行,操作符oper跟踪窗口;JTextField  tNum2;                      //文本行,操作数num2跟踪窗口;JTextField  tMem;                       //文本行,记忆数mem跟踪窗口;//窗口语言;语言代码:默认0英文,1中文,2俄文,3韩文,4日文;private final String [][]LANG = {{"English","Calculator V0.40","About","Auther: yy-2020."},  //0;{"Chinese","DbY计算器v0.40","关于DbY","作者: yy-2020."},       //1;}; //界面语言定制;只需简单修改iLang=1,即可定制编译为中文界面;int     iLang = 0;                     //语言代码iLang; 默认0;    String  sLang = LANG[iLang][0];            //语言串sLang;//完整版v0.34;最佳框架参数507*277;推荐/最佳/默认值;//完整版v0.40;最佳框架参数667*277;推荐/最佳/默认值;private final int fWidth = 667;          //主框架宽度;private final int fHight = 277;         //主框架高度;//v0.40;20221230(AWT2Swing直接升级版);主框架定义;private JFrame     frame = new JFrame(LANG[iLang][1]);    //简易版V2;完整版v0.34;private JMenuBar mbar  = new JMenuBar();private JMenu   []menu;private JMenuItem[][] mItem;private JPanel   pshow = new JPanel();      //计算跟踪显示板;4框显示;private JPanel   pkeys = new JPanel();        //按键板;软键盘;7行8列;    //v0.34;20221004; 对话框定义;物主:frame;模式:true;//v0.40;20221230(AWT2Swing直接升级版);private JDialog about = new JDialog(frame,LANG[iLang][2],true);private JLabel     info  = new JLabel(LANG[iLang][3],JLabel.CENTER); //------------------------------------

2. 增加悬停提示:(创建按钮与菜单部分)

//v0.34;20221005;将原init()中创建键盘按钮的程序段独立为方法,便于实现中英双语界面;
//v0.40;20221230;AWT2Swing直接升级版;并增加中文悬停提示;
private void CreateButtons(JPanel owner,String []KEYS) {    int nKeys=KEYS.length;//*放置按钮;按钮布局顺序由串组KEYS[]决定;【核心段】JButton []keys = new JButton[nKeys];   //创建按钮组对象;//自定义按钮执行动作类MyKeysLis(),事件统一响应;【核心类】for (int i = 0; i < nKeys; i++){keys[i] = new JButton(KEYS[i]);       //创建单个按钮,按钮名@KEYS[];keys[i].setToolTipText(KEYScn[i]);   //新增中文光标悬停提示;keys[i].addActionListener(new MyKeysListen());  //监听注册;动作响应@MyKeysListen();owner.add(keys[i]);                  //放置按钮@物主owner;}
}
//v0.34;20221005;将原init()中创建菜单的程序段独立为方法,便于实现中英双语界面;
//v0.40;20221230;AWT2Swing直接升级版;并增加中文悬停提示;
private void CreateMenu(JMenuBar owner,String [][]MENU) {menu = new JMenu[MENU.length];mItem = new JMenuItem[MENU.length][];//自定义菜单监听执行动作类MyMenuLis(),事件统一响应;【核心类】MyMenuListen mbl = new MyMenuListen();       //创建菜单监听类实例;     //菜单分类创建/注册/放置;命名@MENU[][];分隔线fileMenu.addSeparator();for (int i = 0; i < MENU.length; i++){menu[i] = new JMenu(MENU[i][0]);          //创建菜单;menu[i].setToolTipText(MENUcn[i][0]);    //新增中文光标悬停提示;menu[i].addActionListener(mbl);             //监听注册;动作响应@MyMenuListen();owner.add(menu[i]);                          //放置菜单@物主owner;mItem[i] = new JMenuItem[MENU[i].length-1];for (int j = 0; j < MENU[i].length-1; j++){mItem[i][j] = new JMenuItem(MENU[i][j+1]);    //创建菜单项;mItem[i][j].setToolTipText(MENUcn[i][j+1]);    //新增中文光标悬停提示;mItem[i][j].addActionListener(mbl);     //监听注册;动作响应@MyMenuListen();menu[i].add(mItem[i][j]);                //放置菜单项;}}
}

3. 增加悬停提示:(初始化部分)

//v2;(简易版)20221005;定义主窗口;框架frame;模块优化;//v0.34;20221010;定义主窗口;框架frame;模块优化;功能恢复完整版;//v0.40;20221230;AWT2Swing直接升级版;并增加中文悬停提示;public void init()                               //frameInit();{//定义框架;Image im = (new ImageIcon("res/yy-2020.png")).getImage();frame.setIconImage(im);                        //主窗口图标;frame.setSize(fWidth,fHight);               //完整版v0.33;最佳推荐(345,234);【顺数】//frame.setSize(360,220);                    //简易版v2; 最佳推荐(400,240);【有0】//frame.setSize(507,277);                  //完整版v0.34;最佳推荐((507,277);【有7】//frame.setBackground(new Color(0,64,96));  //自定义深蓝;推荐Color.lightGray;        frame.setBackground(Color.lightGray);   frame.setLocationRelativeTo(null);          //将窗口居中;若无该方法,窗口将位于屏幕左上角     //frame.setResizable(false);                //禁止调整窗口大小。默认允许调整窗口尺寸//操作变量&跟踪窗口;tNum1 = new JTextField(" num1",30);          //文本行,操作数num1跟踪窗口;tNum1.setToolTipText("操作数1");         //新增中文光标悬停提示;tOper = new JTextField(" oper",4);           //文本行,操作符oper跟踪窗口;tOper.setToolTipText("操作符");          //新增中文光标悬停提示;tNum2 = new JTextField(" num2",30);          //文本行,操作数num2跟踪窗口;tNum2.setToolTipText("操作数2");         //新增中文光标悬停提示;tResult = new JTextField(" result",30);      //文本行,计算输入&结果单行显示框;tResult.setToolTipText("计算结果");      //新增中文光标悬停提示;tMem  = new JTextField(" mem",30);           //文本行,记忆mem跟踪窗口;      //文本区参数:a.默认文本;b.输入框行数,推荐n*kRow行字符;c.输入框列数,推荐n*4字符(/每按钮宽);tRecord = new JTextArea(" tRecord\n",5,32);    //创建文本区,操作记录显示区;" 操作记录\n" tRecord.setToolTipText("操作记录区");    //新增中文光标悬停提示;//框架布局;//frame.add(tRecord,BorderLayout.WEST);   //默认;frame.add(pshow,"North");pshow.setLayout(new GridLayout(2,2,0,0));   //设置布局;计算过程4框跟踪显示;  pshow.add(tNum1);pshow.add(tOper);   pshow.add(tNum2);pshow.add(tResult);frame.add(pkeys,"East");                 //顺序在前,上层优先;frame.add(tRecord,"West");//创建键板按钮&窗口菜单;pkeys.setLayout(new GridLayout(kRow,kCol,1,1));      //设置布局;网格间距行列(1,1);         CreateButtons(pkeys,sLang=="Chinese"?KEYScn:KEYS);  //创建键盘按钮;简单DIY;CreateMenu(mbar,sLang=="Chinese"?MENUcn:MENU);     //创建菜单;简单DIY;   frame.setJMenuBar(mbar);//激活窗口;frame.addWindowListener(new MyWinListen());frame.setVisible(true);  }   //------------------------------------

三、运行效果:(截图)





JavaGUI:多功能计算器(四)--Swing实现双语悬停提示(源码升级说明)相关推荐

  1. spring源码分析第四天------springmvc核心原理及源码分析

    spring源码分析第四天------springmvc核心原理及源码分析 1.基础知识普及 2. SpringMVC请求流程 3.SpringMVC代码流程 4.springMVC源码分析 4.1 ...

  2. 小程序源码:修复登录大河盲盒小程序源码,实现运营“玩法自由”,超多功能的盲盒型抽奖挖矿程序源码下载

    程序介绍 应用支持哪些类型的商品? 1.实物需邮寄商品,用户领取时填写收货信息,后台发货. 2.虚拟商品,如:教程.课程.图文.图片.下载链接等等. 3.卡密商品,后台添加卡密商品,填写使用方法.批量 ...

  3. 八字四柱排盘原理及源码(PHP、Java和Python)

    一.四柱原理 四柱八字是中国古老的命理学术之一,也是中国传统文化的重要组成部分.四柱八字是根据人的出生年.月.日.时四个要素,推算出一个人的八个字,即八个字的命理学基础信息,包括年柱.月柱.日柱.时柱 ...

  4. 多功能起名查重工具微信小程序源码

    简介: 这是一个实用需求量还是比较高的一款微信小程序源码,由多个功能组合而成. 具体如下: 名字来源查询: 取名工具(支持多种选择取名): 查询重复名(输入名字查询有多少人和你吃饭): 诗文(里面就是 ...

  5. java类似金山打字的键盘模拟_java实现 swing模仿金山打字 案例源码

    java实现 swing模仿金山打字 案例源码,更多Java技术就去Java教程网.http://java.662p.com 代码: import Java.awt.Color; import jav ...

  6. 黑色简约多功能工具箱去水印外卖流量主小程序源码

    文章目录 前言 一.黑色简约多功能工具箱去水印外卖流量主小程序源码 二.程序演示与下载 1.程序演示 2.程序下载 前言 简单来说是一款聚合工具类小程序,作用比较多.介绍如下 一.黑色简约多功能工具箱 ...

  7. java语言金山打字_[Java教程]java实现 swing模仿金山打字 案例源码

    [Java教程]java实现 swing模仿金山打字 案例源码 0 2014-11-17 12:00:21 java实现 swing模仿金山打字 案例源码,更多Java技术就去Java教程网.http ...

  8. 动态壁纸+工具箱+表情包外卖等10几个功能组合的一款微信小程序源码

    动态壁纸+工具箱+表情包外卖等10几个功能组合的一款微信小程序源码 这是一款多功能组合的一款微信小程序源码 具体功能有如下 表情包功能 动态壁纸功能 静态壁纸功能 头像功能 外卖推广功能 空白名字生成 ...

  9. Slicer学习笔记(四十二)slicer c++源码编译

    Slicer学习笔记(四十二)slicer c++源码编译 1.cmake生成项目 2.编译失败的原因汇总 2.1.下载代码失败 之前在windows下编译slicer,没有做笔记. 后面再次编译还会 ...

最新文章

  1. 在js中使用HashMap数据结构,在js中使用K,V数据结构
  2. HTML5基础-Mark标签高亮显示文本
  3. 树网的核 Vijos1362 NOIP2007 树结构 直径 暴搜
  4. Python逐行读取文件内容
  5. 45K!拿下 AI 技术岗,这些知识点全考了!
  6. twisted 网络通信的简单例子
  7. QPA(Qt Platform Abstraction)介绍 --------QWS(Qt Window System)介绍
  8. python爬取appstore的评论数据的步骤_评论抓取:Python爬取微信在APPStore上的评论内容及星级...
  9. keep-alive 的作用及使用场景
  10. oracle实时异地同步,异地Oracle数据库数据同步
  11. Golang将密码盐加密
  12. 【电路理论】KCL、KVL、线性直流电路各大方法、定理详解
  13. Oracle内存管理PGA详解
  14. 华以青钱柳降糖神茶,告别糖尿病的新选择
  15. 金蝶K3案例教程固定资产前台操作
  16. 当你老了,一生最后悔什么?
  17. 安装武器(pycharm,Anaconda)
  18. 在全球云服务商对比中关于阿里云价格相关原因
  19. 小程序员的大梦想:唐骏在微软总部的日子
  20. 地下停车场FM调频广播覆盖方案

热门文章

  1. MySQL、JDBC、HTML、CSS、JavaScript、jQuery、tomcat、Http、Servlet、JSP、EL、JSTL、Maven、Cookie、Session(框架第一部分)
  2. TESLA M40折腾笔记
  3. Jenkins 汉化
  4. MTI姿态传感器学习笔记
  5. C++动态库dll生成及调用总结
  6. 视频教程-项目管理12个微案例-项目管理
  7. python基于flask_sockets实现WebSocket——叁
  8. win10 无法安全地连接到此页面 TLS安全设置未设置为默认 该怎么办? 无法访问此页面
  9. 小程序z-index层级问题view组件坑,z-index失效
  10. 利用清华镜像站解决pip超时问题