java 图形界面设计制作计算器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 图形界面设计制作计算器相关的知识,希望对你有一定的参考价值。

在NETBEANS 里写的
我的代码如下:JSQ:
package we;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class JSQ extends JFrame implements ActionListener
float i=0;
JPanel jp1=new JPanel();
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();

JButton bt1=new JButton("+");
JButton bt2=new JButton("-");
JButton bt3=new JButton("*");
JButton bt4=new JButton("/");
JButton bt5=new JButton("1");
JButton bt6=new JButton("2");
JButton bt7=new JButton("3");
JButton bt8=new JButton("4");
JButton bt9=new JButton("5");
JButton bt10=new JButton("6");
JButton bt11=new JButton("7");
JButton bt12=new JButton("8");
JButton bt13=new JButton("9");
JButton bt14=new JButton("0");
JButton bt15=new JButton("=");

JLabel je=new JLabel("0");
public JSQ()
super("计算器");

jp1.setBounds(50,150,300,200);
jp1.setBackground(new Color(100,100,150));
this.add(jp1);

jp2.setBounds(50,40,300,30);
jp2.setBackground(new Color(50,100,150));
this.add(jp2);
jp2.add(je);

jp3.setBounds(370,200,70,70);
jp3.setBackground(new Color(100,100,150));
this.add(jp3);

jp1.add(bt1);
jp1.add(bt2);
jp1.add(bt3);
jp1.add(bt4);
jp1.add(bt5);
jp1.add(bt6);
jp1.add(bt7);
jp1.add(bt8);
jp1.add(bt9);
jp1.add(bt10);
jp1.add(bt11);
jp1.add(bt12);
jp1.add(bt13);
jp1.add(bt14);
jp1.add(bt15);

bt1.addActionListener(this);
bt2.addActionListener(this);
bt3.addActionListener(this);
bt4.addActionListener(this);
bt5.addActionListener(this);
bt6.addActionListener(this);
bt7.addActionListener(this);
bt8.addActionListener(this);
bt9.addActionListener(this);
bt10.addActionListener(this);
bt11.addActionListener(this);
bt12.addActionListener(this);
bt13.addActionListener(this);
bt14.addActionListener(this);
bt15.addActionListener(this);

this.setLayout(null);
this.setSize(500,400);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);/**



public void actionPerformed(ActionEvent e)





Test和JSQ是分开的
Test:

package we;

public class Test

public static void main(String[] args)
JSQ jf=new JSQ();




我写到public void actionPerformed(ActionEvent e)

以后就不会写了,不知道怎么实现按键的连续输入,之前写过一些,失败了,所以空着不会。

我想实现的是:先按“1”再按“2”键,标签显示12,不知道怎么实现。然后我按运算符加减乘除,标签上的数字不变,我再按一个数,然后标签上的12被删除,并且打印上我后面按的那个数,然后我再按等号,就会输出运算结果在标签3上,就像一般的计算器一样,要用到变量,不知道要不要用到append,大家帮帮我吧,期末成绩,我的分不多,谢谢了!!!

import java.awt.*;
import javax.swing.*;

import java.awt.event.*;
import java.text.NumberFormat;

public class JSQ extends JFrame implements ActionListener
float i = 0;
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JPanel jp3 = new JPanel();

JButton bt1 = new JButton("+");
JButton bt2 = new JButton("-");
JButton bt3 = new JButton("*");
JButton bt4 = new JButton("/");
JButton bt5 = new JButton("1");
JButton bt6 = new JButton("2");
JButton bt7 = new JButton("3");
JButton bt8 = new JButton("4");
JButton bt9 = new JButton("5");
JButton bt10 = new JButton("6");
JButton bt11 = new JButton("7");
JButton bt12 = new JButton("8");
JButton bt13 = new JButton("9");
JButton bt14 = new JButton("0");
JButton bt15 = new JButton("=");
JButton bt16 = new JButton("C");

JLabel je = new JLabel("0");

public JSQ()
super("计算器");

jp1.setBounds(50, 150, 300, 200);
jp1.setBackground(new Color(100, 100, 150));
this.add(jp1);

jp2.setBounds(50, 40, 300, 30);
jp2.setBackground(new Color(50, 100, 150));
this.add(jp2);
jp2.add(je);

jp3.setBounds(370, 200, 70, 70);
jp3.setBackground(new Color(100, 100, 150));
this.add(jp3);

jp1.add(bt1);
jp1.add(bt2);
jp1.add(bt3);
jp1.add(bt4);
jp1.add(bt5);
jp1.add(bt6);
jp1.add(bt7);
jp1.add(bt8);
jp1.add(bt9);
jp1.add(bt10);
jp1.add(bt11);
jp1.add(bt12);
jp1.add(bt13);
jp1.add(bt14);
jp1.add(bt15);

bt1.addActionListener(this);
bt2.addActionListener(this);
bt3.addActionListener(this);
bt4.addActionListener(this);
bt5.addActionListener(this);
bt6.addActionListener(this);
bt7.addActionListener(this);
bt8.addActionListener(this);
bt9.addActionListener(this);
bt10.addActionListener(this);
bt11.addActionListener(this);
bt12.addActionListener(this);
bt13.addActionListener(this);
bt14.addActionListener(this);
bt15.addActionListener(this);
bt16.addActionListener(this);

this.setLayout(null);
this.setSize(500, 400);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);



StringBuffer val = new StringBuffer();
double data = 0;
char op = '\0';
boolean isComp = false;

public void actionPerformed(ActionEvent e)
JButton b = (JButton) e.getSource();
char c = b.getText().charAt(0);
if (Character.isDigit(c))
if (je.getText().equals("0"))
if (c != '0')
val.append(c);
setResult(val.toString());

else
if (isComp)
val.delete(0, val.length());
val.append(c);
setResult(val.toString());
isComp = false;
else
if (!val.toString().equals("0"))
val.append(c);
setResult(val.toString());



else if (c == '+' || c == '-' || c == '*' || c == '/')
if (op != '\0')
isComp = compute();
op = '\0';

op = c;
if (val.length() == 0)
data = 0;
else
data = Double.parseDouble(val.toString());

val.delete(0, val.length());
isComp = false;
else if (c == '=')
isComp = compute();
op = '\0';



private boolean compute()
double data1 = 0;
if (val.length() == 0)
data1 = 0;
else
data1 = Double.parseDouble(val.toString());

val.delete(0, val.length());
switch (op)
case '+' :
val.append(data + data1);
break;
case '-' :
val.append(data - data1);
break;
case '*' :
val.append(data * data1);
break;
case '/' :
if (data1 == 0)
val.append(0);
else
val.append(data / data1);

break;

setResult(val.toString());
return true;


private void setResult(String data)
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(16);
je.setText(nf.format(Double.parseDouble(data)));


追问

多出来的我看不懂,能给我解释一下吗?

追答

就是点的是数字,就连接起来并显示在标签上
点的是运算符,则将之前拼的数字转成数值型的存起来,并进行一次运算,可能是1+2 接着又+3这种
点的是等于,则根据运算符,进行运算,显示
isComp 是个标志,如果运算完了,又重新输入数字,则清除之前的运算结果

都是些小细节东西

追问

谢谢了

追答

1、charAt(0),是去字符串中的第一个字符。b.getText()取出来的虽然是一个字符,但是字符串类型的,转成字符麻烦,就直接用了个取串中第一个字符,省事
2、Character.idDigit(c),是判断c这个字符是否是数字,是返回true,不是返回false
3、val是记录你输入的数据,和最后计算的结果的。你每输一个字符都记录在val里,然后再setResult就显示的Label上了。
4、private你喜欢用啥就用啥吧,没啥关系,你就改成public吧
5、Double.parseDouble(val.toString())是将字符串转换成double类型的数据。toString()是把val转换成字符串类型的数据
书上没有,查是应该能查到的,java api里面都有,很全的,有中文版的

参考技术A 设一个标志变量看你上一次输入的是什么,如果不是加减乘除这些运算而是基本数字的话,把原来输入的字符拿出来,和新输入的拼到一起再set回去就哦了。追问

不会写,能写一下吗?后面的功能我也想不出来,谢谢了。

参考技术B 那你

java简单计算器开发GUI图形化界面设计与实现(项目源码+课程设计报告)

  1. 课程目的
    1.1. 课程性质
    JAVA 程序设计是计算机专业本科生的必修专业主干课程,授课对象为计算
    机科学与技术专业、数字媒体技术、信息安全专业等相关专业的本科生。
    课程全面、系统地介绍 JAVA 语言的基本知识及程序设计技术,使学生掌握
    Java 语言的语法、数据类型、流程控制等基本知识和面向对象程序设计思想的
    Java 实现;了解 Java 常用的系统类;学习异常处理、线程、图形用户界面设计、
    网络通信等内容。使学生的专业知识进一步完善和丰富,为将来的开发和研究工
    作打下一定的基础。
    1.2. 课程任务
    (1) 巩固和加深学生对 Java 语言课程的基本知识的理解和掌握;
    (2) 掌握 Java 语言编程和程序调试的基本技能;
    (3) 利用 Java 语言进行基本的程序设计;
    (4) 掌握书写程序设计说明文档的能力;
    (5) 提高运用 Java 语言解决实际问题的能力。
  2. 课程设计要求
    编写一个计算器,可实现加减乘除等一系列运算。
    编程要求:选择某一种运算后,根据输入的数据给出运算结果。
    编程提示:在设计出的计算器界面上,通过按钮来实现基本的功能。
  3. 课程设计内容
    3.1. 选题描述
    使用图形用户界面,设计计算器,用户通过鼠标依次输入需要计算的数值,
    点击相应计算功能按钮,可以完成以下功能:

3.2. 画出流程图
(1) 核心功能流程图

3.3. 题目设计 (代码)
public class Calculator extends MouseAdapter 
    JFrame list;
    // Container con;
    JTextField show;
    JButton[] jbNum = new JButton[10];
    JPanel jpMain; // 主面板
    JPanel jpRight; // 右子面板主要用于存放运算符和等号
    JPanel jpLight; // 左子面板用于存放数字,符号, “.”
    JButton dight; // 小数点
    JButton sign; // 正负号
    JButton add; // 加号
    JButton sub; // 减号
    JButton multiply; // 乘号
    JButton divide; // 除号
    JButton power; // 求幂
    JButton cos; // cos
    JButton sin; // sin
    JButton ln; // ln
    JButton ce; // 清除
    JButton equal; // 等于
    JButton mod; // 取余
    JButton sqrt; // sqrt
    double sum = 0; // 临时结果
    boolean b = false; // 监控运算符是否被点击,错误是否出现,用于实现下一次点击按钮时清空
    operator i = operator.un; // 记录等号符点击前某一运算符点击次数,用于实现连加或者连减等

    int op; // 记录操作符

// 操作符一包括+-*/%^
    enum operator 
        add, sub, mul, div, mod, pow, sin, cos, sqrt, ln, un
    

    void display() 
        // 创建主窗口,添加一个Text框,
        list = new JFrame("计算器");
        list.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        list.setSize(360, 230);
        list.setLocation(400, 300);
        list.setBackground(Color.LIGHT_GRAY); // 设置窗口背景颜色
        list.setResizable(false);

        list.setLayout(new FlowLayout(FlowLayout.CENTER));
        show = new JTextField(31);
        show.setHorizontalAlignment(JTextField.RIGHT); // 文本框内文字右对齐
        show.setEditable(false); // 文本框不可编辑
        list.add(show);
        // 创建面板并设置布局
        jpMain = new JPanel();
        jpRight = new JPanel();
        jpLight = new JPanel();
        jpMain.setLayout(new GridLayout(1, 2));
        jpRight.setLayout(new GridLayout(4, 3, 3, 3));
        jpLight.setLayout(new GridLayout(4, 3, 3, 3));
        list.add(jpMain);
        jpMain.add(jpLight);
        jpMain.add(jpRight);
        // 创建0~9按钮对象
        for (int i = 9; i >= 0; i--) 
            jbNum[i] = new JButton(String.valueOf(i));
            jbNum[i].setForeground(Color.BLUE);
            jpLight.add(jbNum[i]);
            jbNum[i].addMouseListener(this);
        
        add = new JButton("+");
        sub = new JButton("-");
        multiply = new JButton("*");
        divide = new JButton("/");
        power = new JButton("x^y");
        sin = new JButton("sin");
        cos = new JButton("cos");
        ln = new JButton("ln");
        ce = new JButton("CE");
        equal = new JButton("=");
        mod = new JButton("%");
        sqrt = new JButton("sqrt");
        jpRight.add(divide);
        jpRight.add(sqrt);
        jpRight.add(ln);
        jpRight.add(multiply);
        jpRight.add(sin);
        jpRight.add(mod);
        jpRight.add(sub);
        jpRight.add(cos);
        jpRight.add(ce);
        jpRight.add(add);
        jpRight.add(power);
        jpRight.add(equal);

        // 给所有按钮注册监听器
        dight = new JButton(".");
        sign = new JButton("±");
        jpLight.add(sign);
        jpLight.add(dight);
        add.addMouseListener(this);
        sub.addMouseListener(this);
        multiply.addMouseListener(this);
        divide.addMouseListener(this);
        power.addMouseListener(this);
        sin.addMouseListener(this);
        cos.addMouseListener(this);
        ln.addMouseListener(this);
        ce.addMouseListener(this);
        equal.addMouseListener(this);
        mod.addMouseListener(this);
        sqrt.addMouseListener(this);
        dight.addMouseListener(this);
        sign.addMouseListener(this);
        list.setVisible(true);

    

    public void mouseClicked(MouseEvent e) 
        // 0~9的输入
        if (e.getSource() == jbNum[0]) 
            input(0, e);
        
        if (e.getSource() == jbNum[1]) 
            input(1, e);
        
        if (e.getSource() == jbNum[2]) 
            input(2, e);
        
        if (e.getSource() == jbNum[3]) 
            input(3, e);
        
        if (e.getSource() == jbNum[4]) 
            input(4, e);
        
        if (e.getSource() == jbNum[5]) 
            input(5, e);
        
        if (e.getSource() == jbNum[6]) 
            input(6, e);
        
        if (e.getSource() == jbNum[7]) 
            input(7, e);
        
        if (e.getSource() == jbNum[8]) 
            input(8, e);
        
        if (e.getSource() == jbNum[9]) 
            input(9, e);
        

        // 小数点,正负号,CE,等号
        if (e.getSource() == dight) 
            if (show.getText().indexOf('.') == -1) 
                show.setText(show.getText() + ".");
            

        
        if (e.getSource() == sign) 
            if (show.getText().indexOf("-") == -1) 
                show.setText("-" + show.getText());
             else 
                show.setText(show.getText().replace('-', '\\0'));
            

        
        if (e.getSource() == ce) 
            show.setText("0");
            sum = 0;
            i = operator.un;
            b = false;
        
        outer: if (e.getSource() == equal) 
            try 
                if (i == operator.un) 
                    b = true;
                 else 
                    if (i == operator.add) 
                        sum += Double.parseDouble(show.getText());

                    
                    if (i == operator.sub) 
                        sum -= Double.parseDouble(show.getText());

                    
                    if (i == operator.mul) 
                        sum *= Double.parseDouble(show.getText());

                    
                    if (i == operator.div) 
                        if (Double.parseDouble(show.getText()) != 0) 
                            sum /= Double.parseDouble(show.getText());

                         else 
                            show.setText("ERROR");
                            b = true;
                            sum = 0;
                            break outer; // 不执行trimIn()方法 屏幕显示错误
                        
                    
                    if (i == operator.mod) 
                        sum %= Double.parseDouble(show.getText());

                    
                    if (i == operator.pow) 
                        sum = Math.pow(sum, Double.parseDouble(show.getText()));

                    
                    trimIn(sum);
                
             catch (Exception ex) 
                show.setText("ERROR");
                b = true;
                sum = 0;
            

            sum = 0;
            i = operator.un;
            b = true;
        
        // 加减乘除//幂指函数//取余
        if (e.getSource() == add) 
            cal(i);
            i = operator.add;
            b = true;

        
        if (e.getSource() == sub) 
            cal(i);
            i = operator.sub;
            b = true;

        
        if (e.getSource() == multiply) 
            cal(i);
            i = operator.mul;
            b = true;

        
        if (e.getSource() == divide) 
            cal(i);
            i = operator.div;
            b = true;

        
        if (e.getSource() == mod) 
            cal(i);
            i = operator.mod;
            b = true;

        
        if (e.getSource() == power) 
            cal(i);
            i = operator.pow;
            b = true;

        

        // sqrt,sin,cos,ln
        try 
            if (show.getText() != "ERROR") 
                if (e.getSource() == sqrt) 
                    sum = Math.sqrt(Double.parseDouble(show.getText()));
                    trimIn(sum);
                    b = true;
                
                if (e.getSource() == sin) 
                    sum = Math.sin(Double.parseDouble(show.getText()));
                    trimIn(sum);
                    b = true;
                
                if (e.getSource() == cos) 
                    sum = Math.cos(Double.parseDouble(show.getText()));
                    trimIn(sum);
                    b = true;
                
                if (e.getSource() == ln) 
                    sum = Math.log(Double.parseDouble(show.getText()));
                    trimIn(sum);
                    b = true;
                
            
         catch (Exception ex) 
            show.setText("ERROR");
            b = true;
        
    

3.4. 运行程序(结果截图)
(1) 运行界面

(2)加减乘除(±*/)

(3)清除运算(CE)

(4)开平方根(sqrt)

(5)三角函数(sin\\cos)

  1. 总结
    该文章分析了一个系统设计与实现,实际上就是让我们建立一个技术体现出来,最主要是要明白自己开发的这个程序它到底有哪些功能࿰

    以上是关于java 图形界面设计制作计算器的主要内容,如果未能解决你的问题,请参考以下文章

    Java课程设计图形界面程序计算器

    java简单计算器开发GUI图形化界面设计与实现(项目源码+课程设计报告)

    JAVA 图形开发中组件对齐方法及界面开发

    CentOS设置防火墙之后,远程执行程序无图形界面

    图形用户界面设计琐碎概念

    Java图形化界面设计——容器(JFrame)