一則運(yùn)算Java運(yùn)算器相關(guān)代碼
作者:施小平 
  本文給出了一則Java運(yùn)算器設(shè)置和實(shí)現(xiàn)各項(xiàng)功能的代碼。
 一則運(yùn)算Java運(yùn)算器:
構(gòu)造者:
- import javax.swing.*;
 - import java.awt.*;
 - import java.awt.event.*;
 - public class Calculator3 extends JFrame implements ActionListener {
 - private boolean dotExist, operated, equaled; // 幫助運(yùn)算的布爾變量
 - private double storedNumber; // 目前的結(jié)果
 - private char lastOperator; // 表示上一運(yùn)算符
 - private JTextField operation; // 結(jié)果欄
 - private JButton dot, plus, minus, multi, div, sqrt, equal, changePN, clear; // 運(yùn)算符
 - private JButton[] numbers; // 數(shù)字
 
初始化變量:
- dotExist = false; // 表示當(dāng)前的數(shù)是否有小數(shù)點(diǎn)
 - operated = false; // 表示任意運(yùn)算符是否被按下
 - equaled = false; // 表示等號(hào)是否被按下
 - storedNumber = 0;
 - lastOperator = '?';
 
初始化窗口變量:
- operation = new JTextField("0");
 - operation.setEditable(false);
 - numbers = new JButton[10];
 - for (int i = 0; i < 10; i++)
 - numbers[i] = new JButton("" + i);
 - dot = new JButton(".");
 - plus = new JButton("+");
 - minus = new JButton("-");
 - multi = new JButton("*");
 - div = new JButton("/");
 - sqrt = new JButton("√");
 - equal = new JButton("=");
 - changePN = new JButton("±");
 - clear = new JButton("AC");
 - 將窗口物體放入窗口:
 - GridBagLayout layout = new GridBagLayout();
 - getContentPane().setLayout(layout);
 - addComponent(layout, operation, 0, 0, 4, 1);
 - addComponent(layout, numbers[1], 1, 0, 1, 1);
 - addComponent(layout, numbers[2], 1, 1, 1, 1);
 - addComponent(layout, numbers[3], 1, 2, 1, 1);
 - addComponent(layout, numbers[4], 2, 0, 1, 1);
 - addComponent(layout, numbers[5], 2, 1, 1, 1);
 - addComponent(layout, numbers[6], 2, 2, 1, 1);
 - addComponent(layout, numbers[7], 3, 0, 1, 1);
 - addComponent(layout, numbers[8], 3, 1, 1, 1);
 - addComponent(layout, numbers[9], 3, 2, 1, 1);
 - addComponent(layout, dot, 4, 0, 1, 1);
 - addComponent(layout, numbers[0], 4, 1, 1, 1);
 - addComponent(layout, sqrt, 4, 2, 1, 1);
 - addComponent(layout, plus, 1, 3, 1, 1);
 - addComponent(layout, minus, 2, 3, 1, 1);
 - addComponent(layout, multi, 3, 3, 1, 1);
 - addComponent(layout, div, 4, 3, 1, 1);
 - addComponent(layout, equal, 5, 0, 2, 1);
 - addComponent(layout, changePN, 5, 2, 1, 1);
 - addComponent(layout, clear, 5, 3, 1, 1);
 - }
 
對(duì)按鈕進(jìn)行反應(yīng)的方法:
- public void actionPerformed(ActionEvent e) {
 - JButton btn = (JButton) e.getSource();
 - if (btn == clear) {
 - operation.setText("0");
 - dotExist = false;
 - storedNumber = 0;
 - lastOperator = '?';
 - } else if (btn == equal) {
 - operate('=');
 - equaled = true;
 - } else if (btn == plus) {
 - operate('+');
 - equaled = false;
 - } else if (btn == minus) {
 - operate('-');
 - equaled = false;
 - } else if (btn == multi) {
 - operate('*');
 - equaled = false;
 - } else if (btn == div) {
 - operate('/');
 - equaled = false;
 - } else if (btn == changePN) {
 - operate('p');
 - operate('=');
 - equaled = true;
 - } else if (btn == sqrt) {
 - operate('s');
 - operate('=');
 - equaled = true;
 - } else {
 - if (equaled)
 - storedNumber = 0;
 - for (int i = 0; i < 10; i++)
 - if (btn == numbers[i]) {
 - if (operation.getText().equals("0"))
 - operation.setText("" + i);
 - else if (!operated)
 - operation.setText(operation.getText() + i);
 - else {
 - operation.setText("" + i);
 - operated = false;
 - }
 - }
 - if (btn == dot && !dotExist) {
 - operation.setText(operation.getText() + ".");
 - dotExist = true;
 - }
 - }
 - }
 
進(jìn)行運(yùn)算的方法:
- private void operate(char operator) {
 - double currentNumber = Double.valueOf(operation.getText())
 - .doubleValue();
 - if (lastOperator == '?')
 - storedNumber = currentNumber;
 - else if (lastOperator == '+')
 - storedNumber += currentNumber;
 - else if (lastOperator == '-')
 - storedNumber -= currentNumber;
 - else if (lastOperator == '*')
 - storedNumber *= currentNumber;
 - else if (lastOperator == '/')
 - storedNumber /= currentNumber;
 - else if (lastOperator == 'p')
 - storedNumber *= -1;
 - else if (lastOperator == 's')
 - storedNumber = Math.sqrt(currentNumber);
 - else if (lastOperator == '=' && equaled)
 - storedNumber = currentNumber;
 - operation.setText("" + storedNumber);
 - operated = true;
 - lastOperator = operator;
 - }
 
快捷使用GridBagLayout的方法:
- private void addComponent(GridBagLayout layout, Component component,
 - int row, int col, int width, int height) {
 - GridBagConstraints constraints = new GridBagConstraints();
 - constraints.fill = GridBagConstraints.BOTH;
 - constraints.insets = new Insets(10, 2, 10, 2);
 - constraints.weightx = 100;
 - constraints.weighty = 100;
 - constraints.gridx = col;
 - constraints.gridy = row;
 - constraints.gridwidth = width;
 - constraints.gridheight = height;
 - layout.setConstraints(component, constraints);
 - if (component instanceof JButton)
 - ((JButton) component).addActionListener(this);
 - getContentPane().add(component);
 - }
 
主方法初始化并顯示窗口:
- public static void main(String[] args) {
 - Calculator3 calc = new Calculator3();
 - calc.setSize(290, 400);
 - calc.setVisible(true);
 - }
 - }
 
【編輯推薦】
- 20個(gè)開發(fā)人員非常有用的Java功能代碼
 - 走進(jìn)Java 7中的模塊系統(tǒng)
 - JavaFX 1.2 已經(jīng)發(fā)布 主要新功能一覽
 - 2009年十大Java技術(shù)解決方案
 - 2008最值得學(xué)習(xí)的五種JAVA技術(shù)
 
責(zé)任編輯:仲衡 
                    來源:
                    施小平個(gè)人博客
 














 
 
 







 
 
 
 