Java使用swing组件实现简易计算器

本文记录了笔者的第一个Java程序,基于Java抽象窗口工具(abstract window toolkit , AWT)和Swing(Swing属于Java Foundation Classes的一部分)实现的建议计算器,由于笔者经验有限,初学Java,代码略带bug,无法实现7+5×8之类式子的计算,只能实现算术运算符按从高到低的式子运算,部分代码略显冗杂,希望大家在评论区积极讨论完善代码!

计算器示意图

一、代码相关知识简介

JFrame(框架)

使用JFrame frame = new JFrame("My Frame");可以创建一个名为My Frame的windows框架

import javax.swing.*;
public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame frame = new JFrame("My Frame");

        frame.setSize(300,300);
        frame.setVisible(true);
    }

}

JButton(按钮)

使用JButton b = new JButtton("My Button");可创建一个按钮组件。

import java.awt.*;
import javax.swing.*;
public class Test {
    JFrame frame;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame frame = new JFrame("My Frame");
        JButton b = new JButton("My Button");

        frame.getContentPane().add(b,BorderLayout.CENTER);  //将按钮放在frame框架中央
        frame.setSize(300,300);
        frame.setVisible(true);
    }

}

JPanel(面板)

面板是一个容器,与顶层容器不同,JPanel不能独立存在,必须放在其他容器的内部,下面代码创建了含有一个按钮的红色面板。

import java.awt.*;
import javax.swing.*;
public class Test {
    JFrame frame;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JFrame frame = new JFrame("My Frame");
        JButton b = new JButton("My Button");
        JPanel panel = new JPanel();

        panel.add(b);
        panel.setBackground(Color.red);
        frame.getContentPane().add(panel,BorderLayout.SOUTH);  //将面板放在frame框架南方
        frame.setSize(300,300);
        frame.setVisible(true);
    }

}

JTextArea(文本输入框)

使用 JTextArea 类可实现一个文本域,其常用构造方法如下。

①JTextArea():创建一个默认的文本域。

②JTextArea(int rows,int columns):创建一个具有指定行数和列数的文本域。

③JTextArea(String text):创建一个包含指定文本的文本域。

④JTextArea(String text,int rows,int columns):创建一个既包含指定文本,又包含指定行数和列数的多行文本域。

出相关组件介绍外与实现计算器还需对布局有简单了解,本文仅使用GridLayout布局管理器,因此只对此做出介绍,若读者需要还可自行理解其他布局管理器。

GridLayout是一种网络式的布局管理器,将容器空间化为几行几列的形式网格,可将每个组件放在其中一格。

GridLayout定义在java.awt包中,有如下三种构造方法

public GridLayout()
public GridLayout(int rows , int cols) //定义的布局有rows行cools列
public GridLayout(int rows , int cols,int h , int w)  ////定义的布局有rows行cools列,水平间距为h,垂直间距为w

二、计算器功能,可实现加、减、乘、除功能,但由于笔者目前能力有限,若使用加、减、乘、除混合功能时需按运算符优先级,从高到小输入式子如7×8+5而不能按5+7×8输入,源代码如下:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator implements ActionListener{
    JFrame frame;
    JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,ba,bd,be,bf,bg,bh,b0,Clear;
    JTextArea ta;
    String Textcontent ="",sum="";
    double result=0;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Calculator cl = new Calculator();
        cl.go();
    }

    public void go()
    {
        frame = new JFrame("Calculator");
        ta = new JTextArea(1,20);               //设置文本框大小为1行20列
        ta.setBackground(Color.lightGray);
        JPanel cp = new JPanel();
        cp.setLayout(new GridLayout(4,4,5,5));   //四行四列,边距为5
        JPanel c = new JPanel();
        c.setLayout(new GridLayout(1,2,5,5));    //一行两列,边距为5
        b0 = new JButton("0");
        b0.addActionListener(this);              //为每个按钮添加监听接口

        b1 = new JButton("1");
        b1.addActionListener(this);

        b2 = new JButton("2");
        b2.addActionListener(this);

        b3 = new JButton("3");
        b3.addActionListener(this);

        b4 = new JButton("4");
        b4.addActionListener(this);

        b5 = new JButton("5");
        b5.addActionListener(this);

        b6 = new JButton("6");
        b6.addActionListener(this);

        b7 = new JButton("7");
        b7.addActionListener(this);

        b8 = new JButton("8");
        b8.addActionListener(this);

        b9 = new JButton("9");
        b9.addActionListener(this);

        ba = new JButton(".");
        ba.addActionListener(this);

        bd = new JButton("+");
        bd.addActionListener(this);

        be = new JButton("-");
        be.addActionListener(this);

        bf = new JButton("×");
        bf.addActionListener(this);

        bg = new JButton("/");
        bg.addActionListener(this);

        bh = new JButton("=");
        bh.addActionListener(this);

        Clear= new JButton("Clear");
        Clear.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                Textcontent ="";
                result=0;
                sum="";
                ta.setText("");
            }
        });

        c.add(ta);
        c.add(Clear);
        c.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        cp.add(b7);
        cp.add(b8);
        cp.add(b9);
        cp.add(bd);
        cp.add(b4);
        cp.add(b5);
        cp.add(b6);
        cp.add(be);
        cp.add(b1);
        cp.add(b2);
        cp.add(b3);
        cp.add(bf);
        cp.add(b0);
        cp.add(ba);
        cp.add(bh);
        cp.add(bg);
        cp.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        Container f = frame.getContentPane();
        f.add(c,BorderLayout.NORTH);
        f.add(cp,BorderLayout.SOUTH);

        frame.pack();
        frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent e)
    {
        String content = e.getActionCommand();
        ta.append(e.getActionCommand());
        getTextContent(content);
    }

    public void getTextContent(String content)
    {
        if(content.equals("+")||content.equals("-")||content.equals("×")||content.equals("/"))
        {
            Textcontent = Textcontent+" "+content+" ";
        }
        else if(content.equals("="))
        {
            Textcontent = Textcontent+" "+content;
            sum=GetResult(Textcontent);
        }
        else
        {
            Textcontent = Textcontent+content;
        }
        ta.append(sum);
    }

    public String GetResult(String Textcontent)
    {
        String n=Textcontent;
        String []content=n.split(" ");
        result = Double.valueOf(content[0]);
        for(int i=1;i<content.length;i++)
        {
            switch(content[i])
            {
            case "+":
                    result = result+Double.valueOf(content[i+1]);
                break;
            case "-":
                    result = result-Double.valueOf(content[i+1]);
                break;
            case "×":
                result = result*Double.valueOf(content[i+1]);
                break;
            case "/":
                    result = result/Double.valueOf(content[i+1]);
                break;
            case "=":
                break;
            }
        }
        return result+"";
    }

}

原文地址:https://www.cnblogs.com/24Zeng/p/12708151.html

时间: 04-15

Java使用swing组件实现简易计算器的相关文章

java swing开发最简易计算器源代码

原文:java swing开发最简易计算器源代码 源代码下载地址:http://www.zuidaima.com/share/1550463496948736.htm 用java swing写的简易计算器 /** *@author www.zuidaima.com */ package com.zuidaima.swing; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; i

java中swing组件设置icon自适应按钮大小

代码如下: ImageIcon icon1 = new ImageIcon(curDir + "/img/folder.png"); Image img = icon1.getImage(); Image newimg = img.getScaledInstance(width,height,java.awt.Image.SCALE_SMOOTH); ImageIcon icon = new ImageIcon(newimg); JButton button = new JButton

java简易计算器

此小程序实现了计算器的基本功能: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SimpleCalc extends JFrame{ private static final long serialVersionUID = 1L; String[] labels = {"←","CE","±","√", "

JAVA开发简易计算器界面-SWT

大家好,我是成都[LD],博客四年前就申请了,一直没打理,最近正好有时间,遂萌生了写技术博客的念头.我不得不感慨现在新技术更新很快,一不小心,就感觉自身就Out了.记得一年前,当时我也是在51CTO上了解到NoSQL和Hadoop这样的信息,当时就简单觉得很新奇,没想到一年之后发展如此迅速~~当然我这样说,并不是叫大家去追寻新技术,最根本的还是基础打牢靠,休息的时候多去了解下最新的IT动态.学习下前辈高手的一些技能~~打铁还需自身硬嘛! 我写博客的目的:一来是为了促进自身的进步,二来是为了希望与

JAVA学习Swing章节按钮组件JButton的简单学习

package com.swing; import java.awt.Container; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URL; import javax.swing.Icon; import javax.swing.ImageIcon;

[java代码库]-简易计算器(第一种)

简易计算器(效果如图所示) 第一种方案:采用Javascript+html完成计算器,支持+-*/,结果显示不允许使用input输入域(可以考虑使用<span>) <html> <head> <title>简易计算器</title> <script language="javascript">//易错:不是"text/javascript" function doCal(){ //alert(d

[java代码库]-简易计算器(第二种)

第二种方案:在程序中不使用if/switch……case等语句,完成计算器功能. <html> <head> <title>简易计算器</title> <script language="javascript">//易错:不是"text/javascript" function doCal(){ var value1=parseInt(document.getElementById("value1

JAVA Swing 组件演示***

下面是Swing组件的演示: package a_swing; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.Ac

JAVA(利用jsp+javabean+servlet)实现简易计算器

代码解释基本都在代码中给出 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loo