JavaGUI:多功能计算器(四)--Swing实现双语悬停提示(源码升级说明)
生活随笔
收集整理的這篇文章主要介紹了
JavaGUI:多功能计算器(四)--Swing实现双语悬停提示(源码升级说明)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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实现双语悬停提示(源码升级说明)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos查询mysql端口被占用_c
- 下一篇: 学习 Java 的历程和体会『写给新手看