JAVA MVC_以MVC架構來進行Java GUI程式開發(二)_建構簡單的四則運算計算器_model中負責計算
於前一篇大致上介紹到MVC核心理念
這裡要對於Model運算部分做一個加強示範
於上一篇示範練習比較強調在於Controller的溝通
這篇我們要來練習簡單四則運算中
別於以往的嵌入介面層設計我們把計算的流程定義於Model當中
於Controller中去呼叫做計算然後再更新顯示給View
CalculatorModel.java
CalculatorView.java
CalculatorController.java
這裡要對於Model運算部分做一個加強示範
於上一篇示範練習比較強調在於Controller的溝通
這篇我們要來練習簡單四則運算中
別於以往的嵌入介面層設計我們把計算的流程定義於Model當中
於Controller中去呼叫做計算然後再更新顯示給View
CalculatorModel.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.cal.Model; /** * * @author chous */ public class CalculatorModel { private int calculationVal; public void addTwoNums(int firstNum,int secondNum){ calculationVal = firstNum + secondNum; } public int getCalculationValue(){ return calculationVal; } } |
CalculatorView.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.cal.View; import java.awt.event.ActionListener; import javax.swing.JOptionPane; /** * * @author chous */ public class CalculatorView extends javax.swing.JFrame { /** * Creates new form CalculatorView */ public CalculatorView() { initComponents(); } public int getFirstNum(){ return Integer.parseInt(this.txtNum1.getText()); } public int getSecondNum(){ return Integer.parseInt(this.txtNum2.getText()); } public int getCalcResult(){ return Integer.parseInt(this.lblResult.getText()); } public void setCalcResult(int res){ this.lblResult.setText(Integer.toString(res)); } public void addCalcListener(ActionListener listenCalButton){ this.btnCal.addActionListener(listenCalButton); } public void displayErrorMessage(String msg){ JOptionPane.showMessageDialog(this, msg); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { txtNum1 = new javax.swing.JTextField(); txtNum2 = new javax.swing.JTextField(); jLabel1 = new javax.swing.JLabel(); btnCal = new javax.swing.JButton(); lblResult = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jLabel1.setText("+"); btnCal.setText("Calculate"); lblResult.setText("___"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(txtNum1, javax.swing.GroupLayout.PREFERRED_SIZE, 177, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel1) .addGap(23, 23, 23) .addComponent(txtNum2, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnCal) .addGap(31, 31, 31) .addComponent(lblResult, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(80, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(44, 44, 44) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(txtNum1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(txtNum2) .addComponent(jLabel1) .addComponent(btnCal) .addComponent(lblResult)) .addContainerGap(284, Short.MAX_VALUE)) ); pack(); }// </editor-fold> /** * @param args the command line arguments */ // public static void main(String args[]) { // /* Set the Nimbus look and feel */ // //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> // /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. // * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html // */ // try { // for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { // if ("Nimbus".equals(info.getName())) { // javax.swing.UIManager.setLookAndFeel(info.getClassName()); // break; // } // } // } catch (ClassNotFoundException ex) { // java.util.logging.Logger.getLogger(CalculatorView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); // } catch (InstantiationException ex) { // java.util.logging.Logger.getLogger(CalculatorView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); // } catch (IllegalAccessException ex) { // java.util.logging.Logger.getLogger(CalculatorView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); // } catch (javax.swing.UnsupportedLookAndFeelException ex) { // java.util.logging.Logger.getLogger(CalculatorView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); // } // //</editor-fold> // // /* Create and display the form */ // java.awt.EventQueue.invokeLater(new Runnable() { // public void run() { // new CalculatorView().setVisible(true); // } // }); // } // Variables declaration - do not modify private javax.swing.JButton btnCal; private javax.swing.JLabel jLabel1; private javax.swing.JLabel lblResult; private javax.swing.JTextField txtNum1; private javax.swing.JTextField txtNum2; // End of variables declaration } |
CalculatorController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.cal.Controller; import com.cal.Model.CalculatorModel; import com.cal.View.CalculatorView; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * * @author chous */ public class CalculatorController { private CalculatorModel m; private CalculatorView v; public CalculatorController(CalculatorModel m, CalculatorView v) { this.m = m; this.v = v; this.v.setVisible(true); this.v.addCalcListener(new CalcListener()); } class CalcListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { int n1, n2 = 0; try { n1 = v.getFirstNum(); n2 = v.getSecondNum(); m.addTwoNums(n1, n2); v.setCalcResult(m.getCalculationValue()); }catch(NumberFormatException ex){ v.displayErrorMessage("Please enter two integers"); } } } } |
留言
張貼留言