用java实现计算器的功能

img

img


想做成图1的样子结果做成了图2的样子,加的文本框好像不起作用,请问我这是哪出问题了,要怎么改才能达到想要的效果


package test;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.xml.soap.Text;

public class test1 extends JFrame{
    public test1() {
        
        //TextArea text=new TextArea();
        JPanel jpanel1=new JPanel();
        JPanel jpanel=new JPanel(new GridLayout(5,4));
        this.add(jpanel1);
        this.add(jpanel);
        String str1 = "0";
        String str2 = "0"; 
        String signal = "+"; 
        String result = "";
        int k1 = 1;
        int k2 = 1;
        int k3 = 1;
        int k4 = 1;
        int k5 = 1;
        JButton store;  // store的作用类似于寄存器,用于记录是否连续按下符号键
        @SuppressWarnings("rawtypes")
        Vector vt = new Vector(20, 10);
        JLabel jlabel1=new JLabel();
        JLabel jlabel2=new JLabel();
        JTextField result_TextField = new JTextField(result, 20);
        JButton clear_Button = new JButton("C");
        JButton button0 = new JButton("0");
        JButton button1 = new JButton("1");
        JButton button2 = new JButton("2");
        JButton button3 = new JButton("3");
        JButton button4 = new JButton("4");
        JButton button5 = new JButton("5");
        JButton button6 = new JButton("6");
        JButton button7 = new JButton("7");
        JButton button8 = new JButton("8");
        JButton button9 = new JButton("9");
         // 计算命令按钮,加减乘除以及小数点、正负号等
        JButton button_Dian = new JButton(".");
        JButton button_jia = new JButton("+");
        JButton button_jian = new JButton("-");
        JButton button_cheng = new JButton("*");
        JButton button_chu = new JButton("/");
        JButton button_dy = new JButton("=");
    JButton button_zhengfu = new JButton("+/-");
    jpanel1.add(result_TextField);
    jpanel.add(jlabel1);
    jpanel.add(jlabel2);
    jpanel.add(clear_Button);
    jpanel.add(button_dy);
    jpanel.add(button0);
    jpanel.add(button1);
    jpanel.add(button2);
    jpanel.add(button_jia);
    jpanel.add(button3);
    jpanel.add(button4);
    jpanel.add(button5);
    jpanel.add(button_jian);
    jpanel.add(button6);
    jpanel.add(button7);
    jpanel.add(button8);
    jpanel.add(button_cheng);
    jpanel.add(button9);
    jpanel.add(button_zhengfu);
    jpanel.add(button_Dian);
    jpanel.add( button_chu);
    
    
    
    class Listener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            
        }
    }
    //Listener_signal类中编写了运算符号键的响应逻辑
        class Listener_signal implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            
        }
    }
    //Listener_clear类中编写了清除键的响应逻辑
        class Listener_clear implements ActionListener {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                
            }
    }
    //Listener_dy类中编写的是等于号键的响应逻辑
        class Listener_dy implements ActionListener {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                
            }
    }
    //Listener_xiaos类中编写的是小数点键的相应逻辑
    class Listener_xiaos implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
            
        }
    }

    // calc()方法中编写了计算逻辑的实现。
        //public void cal() {
    //}
    
    this.setBounds(300, 300, 400, 400);
    this.setVisible(true);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setTitle("计算器");
    //this.add(text, BorderLayout.NORTH);
        
        
        
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
     new test1();
    }

}

你没有设置按钮字体样式 ,比如像下面这样设置

button .setFont(new java.awt.Font("华文行楷", 1, 15));

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/653483
  • 你也可以参考下这篇文章:java类中子类重写父类中的方法,父类对象用子类对象实例化以后,父类的引用如何调用父类中的被重写方法。
  • 你还可以看下java参考手册中的 java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-注释是元数据的一种形式,为编译器提供信息。本课介绍了在程序中有效使用注释的地方和方法。-声明一个注解类型
  • 除此之外, 这篇博客: Java经典案例中的 这是一个权限认证的例子,使用了哈希表作为数据的存储 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • public class RoleRight {
        private static Hashtable<String, String> rightList = new Hashtable<String, String>();
    
        /**
         * 方法说明:初始化数据
         */
        public void init() {
            String[] accRoleList = {"admin", "satrap", "manager", "user", "guest"};
            String[] rightCodeList = {"10001", "10011", "10021", "20011", "24011"};
            for (int i = 0; i < accRoleList.length; i++) {
                rightList.put(accRoleList[i], rightCodeList[i]);
            }
        }
    
        /**
         * 方法说明:获取角色权限代码
         * 输入参数:String accRole 角色名称
         * 返回类型:String 权限代码
         */
        public String getRight(String accRole) {
            if (rightList.containsKey(accRole)) return (String) rightList.get(accRole);
            else return null;
        }
    
        /**
         * 方法说明:添加角色和代码信息
         * 输入参数:String accRole 角色名称
         * 输入参数:String rightCode 角色权限代码
         * 返回类型:void (无)
         */
        public void insert(String accRole, String rightCode) {
            rightList.put(accRole, rightCode);
        }
    
        /**
         * 方法说明:删除角色权限
         * 输入参数:String accRole 角色名称
         * 返回类型:void(无)
         */
        public void delete(String accRole) {
            if (rightList.containsKey(accRole)) rightList.remove(accRole);
        }
    
        /**
         * 方法说明:修改角色权限代码
         * 输入参数:String accRole 角色名称
         * 输入参数:String rightCode 角色权限代码
         * 返回类型:void(无)
         */
        public void update(String accRole, String rightCode) {
            this.delete(accRole);
            this.insert(accRole, rightCode);
        }
    
        /**
         * 方法说明:打印哈希表中角色和代码对应表
         * 输入参数:无
         * 返回类型:无
         */
        public void print() {
            Enumeration<String> RLKey = rightList.keys();
            while (RLKey.hasMoreElements()) {
                String accRole = RLKey.nextElement().toString();
                print(accRole + "=" + this.getRight(accRole));
            }
        }
    
        /**
         * 方法说明:打印信息(过载)
         * 输入参数:Object oPara 打印的信息内容
         * 返回类型:无
         */
        public void print(Object oPara) {
            System.out.println(oPara);
        }
    
        /**
         * 方法说明:主方法
         * 输入参数:
         * 返回类型:
         */
        public static void main(String[] args) {
            RoleRight RR = new RoleRight();
            RR.init();
            RR.print();
            RR.print("___________________________");
            RR.insert("presider", "10110");
            RR.print();
            RR.print("___________________________");
            RR.update("presider", "10100");
            RR.print();
            RR.print("___________________________");
            RR.delete("presider");
            RR.print();
        }
    }
    
  • 您还可以看一下 徐无忌老师的Java进阶高手课-并发编程透彻理解课程中的 什么是多线程的上下文切换,有什么影响?如何进行优化?(一)小节, 巩固相关知识点