⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculatorwindow.java

📁 书上的例子
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.io.*;

public class CalculatorWindow extends JFrame implements ActionListener {
    NumberButton[] numberButton;
    OperationButton[] operationButton;
    JButton 小数点操作, 正负号操作, 退格操作, 等号操作, 清零操作, sin;
    JTextField resultShow;
    JTextField showComputerProcess;
    JTextArea saveComputerProcess;
    JButton saveButton, copyButton, clearButton;
    LinkedList<String> list;    // 链表用来存放第一个运算数、运算符号和第二个运算数
    HandleDigit handleDigit;
    HandleOperation handleOperation;
    HandleBack handleBack;
    HandleClear handleClear;
    HandleEquality handleEquality;
    HandleDot handleDot;
    HandlePOrN handlePOrN;
    HandleSin handleSin;

    public CalculatorWindow() {
        setTitle("计算器");
        JPanel panelLeft, panelRight;
        list = new LinkedList<String>();
        resultShow = new JTextField(10);
        resultShow.setHorizontalAlignment(JTextField.RIGHT);
        resultShow.setForeground(Color.blue);
        resultShow.setFont(new Font("TimesRoman", Font.BOLD, 16));
        resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
        resultShow.setEditable(false);
        resultShow.setBackground(Color.white);
        showComputerProcess = new JTextField();
        showComputerProcess.setHorizontalAlignment(JTextField.CENTER);
        showComputerProcess.setFont(new Font("Arial", Font.BOLD, 16));
        showComputerProcess.setBackground(Color.cyan);
        showComputerProcess.setEditable(false);
        saveComputerProcess = new JTextArea();
        saveComputerProcess.setEditable(false);
        saveComputerProcess.setFont(new Font("宋体", Font.PLAIN, 16));
        numberButton = new NumberButton[10];
        handleDigit = new HandleDigit(list, resultShow, showComputerProcess);
        for (int i = 0; i <= 9; i++) {
            numberButton[i] = new NumberButton(i);
            numberButton[i].setFont(new Font("Arial", Font.BOLD, 20));
            numberButton[i].addActionListener(handleDigit);
        }
        operationButton = new OperationButton[4];
        handleOperation = new HandleOperation(list, resultShow,
            showComputerProcess, saveComputerProcess);
        String[] 运算符号 = {"+", "-", "*", "/"};
        for (int i = 0; i < 4; i++) {
            operationButton[i] = new OperationButton(运算符号[i]);
            operationButton[i].setFont(new Font("Arial", Font.BOLD, 20));
            operationButton[i].addActionListener(handleOperation);
        }
        小数点操作 = new JButton(".");
        handleDot = new HandleDot(list, resultShow, showComputerProcess);
        小数点操作.addActionListener(handleDot);
        正负号操作 = new JButton("+/-");
        handlePOrN = new HandlePOrN(list, resultShow, showComputerProcess);
        正负号操作.addActionListener(handlePOrN);
        等号操作 = new JButton("=");
        handleEquality = new HandleEquality(list, resultShow,
            showComputerProcess, saveComputerProcess);
        等号操作.addActionListener(handleEquality);
        sin = new JButton("sin");
        handleSin = new HandleSin(list, resultShow,
            showComputerProcess, saveComputerProcess);
        sin.addActionListener(handleSin);
        退格操作 = new JButton("退格");
        handleBack = new HandleBack(list, resultShow, showComputerProcess);
        退格操作.addActionListener(handleBack);
        清零操作 = new JButton("C");
        handleClear = new HandleClear(list, resultShow, showComputerProcess);
        清零操作.addActionListener(handleClear);
        清零操作.setForeground(Color.red);
        退格操作.setForeground(Color.red);
        等号操作.setForeground(Color.red);
        sin.setForeground(Color.blue);
        正负号操作.setForeground(Color.blue);
        小数点操作.setForeground(Color.blue);
        panelLeft = new JPanel();
        panelRight = new JPanel();
        panelLeft.setLayout(new BorderLayout());
        JPanel centerInLeft = new JPanel();
        panelLeft.add(resultShow, BorderLayout.NORTH);
        panelLeft.add(centerInLeft, BorderLayout.CENTER);
        centerInLeft.setLayout(new GridLayout(4, 5));
        centerInLeft.add(numberButton[1]);
        centerInLeft.add(numberButton[2]);
        centerInLeft.add(numberButton[3]);
        centerInLeft.add(operationButton[0]);
        centerInLeft.add(清零操作);
        centerInLeft.add(numberButton[4]);
        centerInLeft.add(numberButton[5]);
        centerInLeft.add(numberButton[6]);
        centerInLeft.add(operationButton[1]);
        centerInLeft.add(退格操作);
        centerInLeft.add(numberButton[7]);
        centerInLeft.add(numberButton[8]);
        centerInLeft.add(numberButton[9]);
        centerInLeft.add(operationButton[2]);
        centerInLeft.add(sin);
        centerInLeft.add(numberButton[0]);
        centerInLeft.add(正负号操作);
        centerInLeft.add(小数点操作);
        centerInLeft.add(operationButton[3]);
        centerInLeft.add(等号操作);
        panelRight.setLayout(new BorderLayout());
        panelRight.add(showComputerProcess, BorderLayout.NORTH);
        saveButton = new JButton("保存");
        copyButton = new JButton("复制");
        clearButton = new JButton("清除");
        saveButton.setToolTipText("保存计算过程到文件");
        copyButton.setToolTipText("复制选中的计算过程");
        clearButton.setToolTipText("清除计算过程");
        saveButton.addActionListener(this);
        copyButton.addActionListener(this);
        clearButton.addActionListener(this);
        panelRight.add(new JScrollPane(saveComputerProcess), BorderLayout.CENTER);
        JPanel southInPanelRight = new JPanel();
        southInPanelRight.add(saveButton);
        southInPanelRight.add(copyButton);
        southInPanelRight.add(clearButton);
        panelRight.add(southInPanelRight, BorderLayout.SOUTH);
        JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
            panelLeft, panelRight);
        add(split, BorderLayout.CENTER);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setBounds(100, 50, 528, 258);
        validate();
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == copyButton)
            saveComputerProcess.copy();
        if (e.getSource() == clearButton)
            saveComputerProcess.setText(null);
        if (e.getSource() == saveButton) {
            JFileChooser chooser = new JFileChooser();
            int state = chooser.showSaveDialog(null);
            File file = chooser.getSelectedFile();
            if (file != null && state == JFileChooser.APPROVE_OPTION) {
                try {
                    String content = saveComputerProcess.getText();
                    StringReader read = new StringReader(content);
                    BufferedReader in = new BufferedReader(read);
                    FileWriter outOne = new FileWriter(file);
                    BufferedWriter out = new BufferedWriter(outOne);
                    String str = null;
                    while ((str = in.readLine()) != null) {
                        out.write(str);
                        out.newLine();
                    }
                    in.close();
                    out.close();
                } catch (IOException exc) {}
            }
        }
    }

    public static void main(String[] args) {
        new CalculatorWindow();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -