基于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+"";
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java Swing JProgressBar进度条的实现示例

    1. 概述 官方JavaDocsApi: javax.swing.JProgressBar JProgressBar,进度条. 以可视化形式显示某些任务进度的组件. 进度条中心可显示进度百分比的文本表示形式. 当一个任务的进度长度未知时,可将进度条设置为不确定模式.不确定模式的进度条持续地显示动画来表示正进行的操作.当 可以确定任务长度和进度量时,则可设置进度条的最大最小值,以及更新进度条的进度值,将其切换回确定模式. JProgressBar 常用构造方法: /** * 构造方法中的参数含义:

  • Java Swing JButton按钮的实现示例

    1. 概述 官方JavaDocsApi: javax.swing.JButton JButton,按钮. JButton 常用构造方法: // 创建不带有设置文本或图标的按钮 JButton() // 创建一个带文本的按钮 JButton(String text) // 创建一个带图标的按钮 JButton(Icon icon) JButton 常用方法: // 设置按钮的 文本.字体 和 字体颜色 void setText(String text) void setFont(Font font

  • Java Swing JPanel面板的使用方法

    1. 概述 官方JavaDocsApi: javax.swing.JPanel JPanel,面板.JPanel 是在开发中使用频率非常高的一般轻量级面板容器组件. JPanel 常用构造方法: // 创建默认使用流式布局的面板 JPanel() // 创建指定布局管理器的面板 JPanel(LayoutManager layout) 2. 代码实例 package com.xiets.swing; import javax.swing.*; import java.awt.*; public

  • Java Swing null绝对布局的实现示例

    1. 概述 官方JavaDocsApi: java.awt.Component,java.awt.Container null,绝对布局.绝对布局没有特定一个布局管理器类来表示,给容器的布局管理器设置为 null,就表示使用绝对布局,即通过设置组件的坐标和宽高来布置组件. 绝对布局需要明确指定每一个组件的坐标和宽高,否则不显示. 对于使用其他布局时给组件设置坐标和宽高,一般会遵循以下两点: 使用其他布局时,如果在窗口显示之后,再添加新组件,则该组件也会被当做绝对布局对待(即需要手动指定坐标和宽高

  • Java Swing JLabel标签的使用方法

    1. 概述 官方JavaDocsApi: javax.swing.JLabel JLabel,标签.标签主要用于展示 文本 或 图片,也可以 同时显示文本和图片. JLabel 的构造方法: /* * 构造方法中的参数含义: * text: 标签显示的 文本 * image: 标签显示的 图片 * horizontalAlignment: 标签内容(在标签内)的水平对其方式(竖直方向默认居中, 可通过方法设置) */ JLabel() JLabel(String text) JLabel(Str

  • Java Swing JList列表框的实现

    1. 概述 官方JavaDocsApi: javax.swing.JList JList,列表框.JList 以列表的形式展示多个选项,允许用户选择一个或多个选项.其中的选项内容由一个 ListModel 实例来维护.JList 不实现直接滚动,需要滚动显示,可以结合 JScrollPane 实现滚动效果. JList 常用构造方法: /** * 一个 JList 实例维护这一个 ListModel 实例. * ListModel 实例可以直接创建,也可以通过把 数组 或 集合 传递到 JLis

  • Java Swing JComboBox下拉列表框的示例代码

    1. 概述 官方JavaDocsApi: javax.swing.JComboBox JComboBox,下拉列表框.JComboBox以下列列表的形式展示多个选项,用户可以从下拉列表中选择一个值. 其中的选项内容由一个 ComboBoxModel 实例来维护. 如果设置JComboBox为可编辑状态,除了选择指定的选项值外,还允许用户自行输入值(自行输入的值索引为-1). JComboBox 常用构造方法: /** * 一个 JComboBox 实例维护这一个 ComboBoxModel 实例

  • 基于Java swing组件实现简易计算器

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

  • Java Swing组件定制RadioButton示例

    本文实例讲述了Java Swing组件定制RadioButton.分享给大家供大家参考,具体如下: 先来看看效果图: 具体代码如下: package themedemo; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.RenderingH

  • 如何利用Java AWT 创建一个简易计算器

    目录 一.关于AWT 二.逻辑部分 1.对于数字按钮 2.对于算术按钮 3.对于等号按钮 4.对于清除按钮 5.对于退格按钮 6.特殊插件功能 7.==例如==: 三.GIF演示 四.附完整代码 摘要:手把手教你使用 Java AWT 创建一个简易计算器. 一.关于AWT AWT (抽象窗口工具包)是一个有助于构建 GUI 的 API (图形用户界面)基于 java 应用程序.GUI使用一些图形帮助用户交互.它主要由一组的类和方法所必需的,如在一个简化的方式创建和管理的GUI按钮,窗口,框架,文

  • 基于Python+Tkinter实现一个简易计算器

    目录 设计原理 示例效果 主要代码 设计原理 从结构上来说,一个简单的图形界面,需要由界面组件.组件的事件监听器(响应各类事件的逻辑)和具体的事件处理逻辑组成.界面实现的主要工作是创建各个界面组件对象,对其进行初始化,以及控制各组件之间的层次关系和布局 示例效果 主要代码 import tkinter import math import tkinter.messagebox class Calculator(object): # 界面布局方法 def __init__(self): # 创建主

  • Java Swing组件下拉菜单控件JComboBox用法示例

    本文实例讲述了Java Swing组件下拉菜单控件JComboBox用法.分享给大家供大家参考,具体如下: JComboBox是Swing中的下拉菜单控件.它永远只能选中一个项目,然而比单选按钮节省空间.如果使用setEditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框.注意,对选项的编辑只会影响当前项,而不会改变列表内容.可以使用addItem方法来添加选项列表,或者使用insertItemAt在任何位置插入选项:然而如果有大量选项需要添加,这种方法是非常笨重的,可

  • Java Swing组件布局管理器之FlowLayout(流式布局)入门教程

    本文实例讲述了Java Swing组件布局管理器之FlowLayout(流式布局).分享给大家供大家参考,具体如下: FlowLayout应该是Swing布局管理器学习中最简单.最基础的一个.所谓流式,就是内部控件像水流一样,从前到后按顺序水平排列,直到达到容器的宽度时跳转到第二行.既然是水平排列,那么就存在三种基本的对齐方式:居中对齐(CENTER ).左对齐(LEFT )和右对齐(RIGHT ).然而,FlowLayout还提供两种对齐方式:LEADING,表示控件与容器方向开始边对应:TR

  • Java Swing组件JFileChooser用法实例分析

    本文实例讲述了Java Swing组件JFileChooser用法.分享给大家供大家参考,具体如下: JFileChooser文件选择器是Swing中经常用到的一个控件.它的使用主要包含以下几个参数: 1.当前路径.也就是它第一次打开时所在的路径,许多软件喜欢设置为桌面. 2.文件过滤器.通过设置文件过滤器,只有特定类型的文件是可见的,比如文本,音频,等. 3.选择模式.包含三种情况:仅文件, 仅目录, 文件或目录. 4.是否允许多选. JFileChooser的参数当然不止以上4种,它还有很多

  • Java Swing组件复选框JCheckBox用法示例

    本文实例讲述了Java Swing组件复选框JCheckBox用法.分享给大家供大家参考,具体如下: JCheckBox是Swing中的复选框.所谓复选框就是指,可以同时存在多个这样的控件,它们可以有多个处于被选中状态.对于每一个复选框而言,它只有选中和未选中两种状态. JCheckBox的常用方法如下图所示: 可以为它添加ActionListener对象来响应事件. 使用demo如下: JCheckBoxDemo.java package awtDemo; import java.awt.Bo

  • Java Swing组件单选框JRadioButton用法示例

    本文实例讲述了Java Swing组件单选框JRadioButton用法.分享给大家供大家参考,具体如下: JRadioButton是Swing中的单选框.所谓单选框是指,在同一个组内虽然有多个单选框存在,然而同一时刻只能有一个单选框处于选中状态.它就像收音机的按钮,按下一个时此前被按下的会自动弹起,故因此得名.因此,在添加JRadioButton控件时,要记得将它们添加到同一个ButtonGroup中. JRadioButton的常用方法如下图所示: 可以为它添加ActionListener对

  • Java Swing组件BoxLayout布局用法示例

    本文实例讲述了Java Swing组件BoxLayout布局用法.分享给大家供大家参考,具体如下: BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS.Y_AXIS 来决定的.X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列.BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是采用水平还是垂直排列.下面是一个使用 BoxLayout排列控件的例子: JPanel panel

随机推荐