黑马程序员技术交流社区

标题: gui 简单的计算器 [打印本页]

作者: fmi110    时间: 2015-9-16 22:34
标题: gui 简单的计算器
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */

  6. package cn.itcasst.util;

  7. import java.awt.Dimension;
  8. import java.awt.Image;
  9. import java.awt.Toolkit;
  10. import javax.swing.JFrame;

  11. /**
  12. *  
  13. * @author hyning
  14. */
  15. public class UiUtil {
  16.     private UiUtil(){}
  17.     //设置窗体的图标,需要接收设置的窗体对象
  18.     public static void setFrameImage(JFrame jf){
  19.         //获取工具包对象
  20. //        public static ToolKit getDefaultToolKit();获取默认的工具包
  21.             Toolkit tk = Toolkit.getDefaultToolkit();
  22.             //获取图片
  23. //            tk.getImage("D:\\JavaGuiProject\\模拟四则运算\\src\\cn\\itcasst\\resource\\jjcc.jpg");
  24.              Image i = tk.getImage("src\\cn\\itcasst\\resource\\jjcc.jpg");
  25.              //给窗体设置图片
  26.              jf.setIconImage(i);
  27.     }
  28.     //设置窗口居中
  29.     public static void setFrameCenter(JFrame jf){
  30.         //获取屏幕宽高
  31.         Toolkit tk = Toolkit.getDefaultToolkit();
  32.         Dimension d = tk.getScreenSize();
  33.         double screenWidth = d.getWidth();
  34.         double screenHeight = d.getHeight();
  35.         //获取窗口宽高
  36.         int frameWidth = jf.getWidth();
  37.         int frameHeight = jf.getHeight();
  38.         //计算居中坐标
  39.         int x = (int)(screenWidth - frameWidth)/2;
  40.         int y = (int)(screenHeight - frameWidth)/2;
  41.         //设置窗口位置
  42.         jf.setLocation(x,y);
  43.     }
  44. }
复制代码



作者: fmi110    时间: 2015-9-16 22:36
  1. /*

  2. package cn.itcasst.view;

  3. import cn.itcasst.util.UiUtil;
  4. import javax.swing.JOptionPane;

  5. /**
  6. *
  7. * @author hyning
  8. */
  9. public class NewJFrame extends javax.swing.JFrame {

  10.     /**
  11.      * Creates new form NewJFrame
  12.      */
  13.     public NewJFrame() {
  14.         initComponents();
  15.         //自己添加的初始化窗口的代码
  16.         init();
  17.     }

  18.     private void init() {
  19.         this.setTitle("模拟四则运算");
  20.         UiUtil.setFrameImage(this);
  21.         //设置居中
  22.         UiUtil.setFrameCenter(this);
  23.     }

  24.    
  25.     @SuppressWarnings("unchecked")
  26.     // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
  27.     private void initComponents() {

  28.         jLabel1 = new javax.swing.JLabel();
  29.         jLabel2 = new javax.swing.JLabel();
  30.         jLabel3 = new javax.swing.JLabel();
  31.         firstNumber = new javax.swing.JTextField();
  32.         secondNumber = new javax.swing.JTextField();
  33.         resultNumber = new javax.swing.JTextField();
  34.         jLabel4 = new javax.swing.JLabel();
  35.         selectOperator = new javax.swing.JComboBox();
  36.         jButton1 = new javax.swing.JButton();

  37.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

  38.         jLabel1.setText("第一个操作数");

  39.         jLabel2.setText("第二个操作数");

  40.         jLabel3.setText("结果");

  41.         jLabel4.setText("=");

  42.         selectOperator.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "+", "-", "*", "/" }));
  43.         selectOperator.addActionListener(new java.awt.event.ActionListener() {
  44.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  45.                 selectOperatorActionPerformed(evt);
  46.             }
  47.         });

  48.         jButton1.setText("计算");
  49.         jButton1.addActionListener(new java.awt.event.ActionListener() {
  50.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  51.                 jButton1ActionPerformed(evt);
  52.             }
  53.         });

  54.         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  55.         getContentPane().setLayout(layout);
  56.         layout.setHorizontalGroup(
  57.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  58.             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  59.                 .addGap(25, 25, 25)
  60.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  61.                     .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  62.                     .addComponent(firstNumber))
  63.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 38, Short.MAX_VALUE)
  64.                 .addComponent(selectOperator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  65.                 .addGap(32, 32, 32)
  66.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  67.                     .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  68.                     .addComponent(secondNumber))
  69.                 .addGap(18, 18, 18)
  70.                 .addComponent(jLabel4)
  71.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  72.                     .addGroup(layout.createSequentialGroup()
  73.                         .addGap(42, 42, 42)
  74.                         .addComponent(jLabel3))
  75.                     .addGroup(layout.createSequentialGroup()
  76.                         .addGap(18, 18, 18)
  77.                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  78.                             .addComponent(jButton1)
  79.                             .addComponent(resultNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE))))
  80.                 .addContainerGap())
  81.         );
  82.         layout.setVerticalGroup(
  83.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  84.             .addGroup(layout.createSequentialGroup()
  85.                 .addGap(21, 21, 21)
  86.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  87.                     .addComponent(jLabel1)
  88.                     .addComponent(jLabel2)
  89.                     .addComponent(jLabel3))
  90.                 .addGap(18, 18, 18)
  91.                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  92.                     .addComponent(firstNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  93.                     .addComponent(secondNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  94.                     .addComponent(resultNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  95.                     .addComponent(jLabel4)
  96.                     .addComponent(selectOperator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  97.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 35, Short.MAX_VALUE)
  98.                 .addComponent(jButton1)
  99.                 .addContainerGap())
  100.         );

  101.         pack();
  102.     }// </editor-fold>                        

  103.     private void selectOperatorActionPerformed(java.awt.event.ActionEvent evt) {                                               
  104.     }                                             

  105.     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
  106.         String regex = "\\d+";
  107.         //获取第一个操作数
  108.         String firstNumberString = this.firstNumber.getText().trim();
  109.         //获取运算符
  110.         String selectOperator = this.selectOperator.getSelectedItem().toString();
  111.         //获取第二个操作数
  112.         String secondNumberString = this.secondNumber.getText().trim();
  113.         //校验数据
  114.         if (!firstNumberString.matches(regex)) {
  115.             JOptionPane.showMessageDialog(this, "第一个操作数必须是数字");
  116.             this.firstNumber.setText("");
  117.             this.firstNumber.requestFocus();
  118.             return;
  119.         }
  120.         if (!secondNumberString.matches(regex)) {
  121.             JOptionPane.showMessageDialog(this, "第二个操作数必须是数字");
  122.             this.secondNumber.setText("");
  123.             this.secondNumber.requestFocus();
  124.             return;
  125.         }

  126.         //计算结果
  127.         int resultNumber = 0;//定义变量接收结果
  128.         int first = Integer.parseInt(firstNumberString);
  129.         int second = Integer.parseInt(secondNumberString);
  130.         switch (selectOperator) {
  131.             case "+":
  132.                 resultNumber = first + second;
  133.                 break;
  134.             case "-":
  135.                 resultNumber = first - second;
  136.                 break;
  137.             case "*":
  138.                 resultNumber = first * second;
  139.                 break;
  140.             case "/":
  141.                 if (second == 0) {
  142.                     JOptionPane.showMessageDialog(this, "除数不能为0");
  143.                     this.secondNumber.setText("");
  144.                     this.secondNumber.requestFocus();
  145.                     return;
  146.                 }
  147.                 resultNumber = first / second;
  148.                 break;
  149.         }
  150.         //结果复制给结果框
  151.         this.resultNumber.setText(String.valueOf(resultNumber));
  152.     }                                       

  153.     /**
  154.      * @param args the command line arguments
  155.      */
  156.     public static void main(String args[]) {
  157.         /* Set the Nimbus look and feel */
  158.         //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
  159.       
  160.         try {
  161.             for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
  162.                 if ("Nimbus".equals(info.getName())) {
  163.                     javax.swing.UIManager.setLookAndFeel(info.getClassName());
  164.                     break;
  165.                 }
  166.             }
  167.         } catch (ClassNotFoundException ex) {
  168.             java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  169.         } catch (InstantiationException ex) {
  170.             java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  171.         } catch (IllegalAccessException ex) {
  172.             java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  173.         } catch (javax.swing.UnsupportedLookAndFeelException ex) {
  174.             java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
  175.         }
  176.         //</editor-fold>

  177.         /* Create and display the form */
  178.         java.awt.EventQueue.invokeLater(new Runnable() {
  179.             public void run() {
  180.                 new NewJFrame().setVisible(true);
  181.             }
  182.         });
  183.     }

  184.     // Variables declaration - do not modify                     
  185.     private javax.swing.JTextField firstNumber;
  186.     private javax.swing.JButton jButton1;
  187.     private javax.swing.JLabel jLabel1;
  188.     private javax.swing.JLabel jLabel2;
  189.     private javax.swing.JLabel jLabel3;
  190.     private javax.swing.JLabel jLabel4;
  191.     private javax.swing.JTextField resultNumber;
  192.     private javax.swing.JTextField secondNumber;
  193.     private javax.swing.JComboBox selectOperator;
  194.     // End of variables declaration                  

  195. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2