gysgynus 2022-12-18 08:47 采纳率: 87.5%
浏览 102
已结题

找到并深度分析一个面向对象Java程序并改写

快速帮助复习Java程序的知识请求各位帮助

img

img


(不需要录视频,但是麻烦详细讲解程序)
需要包涵的知识点:

img

img

img

img

img

img

img

  • 写回答

5条回答 默认 最新

  • 汐^~^ 2022-12-18 18:52
    关注

    我上次写了一个计算器,给你看看,注释我也很清楚,如果可以你就采纳吧

    
    import javax.swing.*;
    
    public class Ji extends JFrame
    {
        public Ji()
        {
            add(new JiSuanQi());//将JiSuanQi实例加入到框架中
            pack();//pack类可以调整窗口大小,以适合其组件的大小和布局
        }
    }
    
    
    
    import java.awt.*;
    import javax.swing.*;
    public class JiSuan
    {
        public static void main(String[] args)
        {
            EventQueue.invokeLater(() -> {
                Ji frame = new Ji();//构建Ji类,调用Ji中的方法
                frame.setTitle("Calculator");//设置窗口标题为Calculator(计算器)
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//构建窗口,EXIT_ON_CLOSE表示结束窗口所在的应用程序,在窗口被关闭时退出
                frame.setVisible(true);//设置窗口可见,否则窗口不会显示
            });// 使用EventQueue.invokeLater,其好处是调用完这个方法后将其销毁,由于匿名内部类作为临时变量存在,给它分配的内存此时被释放
        }
    }
    
    
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class JiSuanQi extends JPanel
    {
        public static Object event;
        public JButton display;
       public JPanel panel;
        public double result;
        public String lastCommand;
        public boolean start;
    
        public JiSuanQi()
        {
            setLayout(new BorderLayout());//设置屏幕上组件的格式布局
    
            result = 0;//用于记录计算结果
            lastCommand = "=";//lastcommand译为最后指令,表示输入最后指令为“=“(输入后开始执行计算过程)
            start = true;//如果为真,则开始
    
            display = new JButton("0");//display用于生成框类型,值为0
            display.setEnabled(false);
            add(display, BorderLayout.NORTH);//将此框放在最上面(初始显示数值为0,此框用于展示计算结果)
    
            ActionListener insert = new InsertAction();//调用类里的InsertAction方法(用于获取点击按钮的数值)
            ActionListener command = new CommandAction();//调用类里的CommandAction方法(进行计算过程)
            panel = new JPanel();
    
            panel.setLayout(new GridLayout(4, 4));//设置4行4列的按钮
    
            //下面就是设置按钮了,其中insert表示要获取该按钮的数字,command表示进行计算的按钮(insertcommand已在上面构建,分别使用InsertActionCommandAction方法)
    
            //第一行按钮
            addButton("7", insert);
            addButton("8", insert);
            addButton("9", insert);
            addButton("/", command);
    
            //第二行按钮
            addButton("4", insert);
            addButton("5", insert);
            addButton("6", insert);
            addButton("*", command);
    
            //第三行按钮
            addButton("1", insert);
            addButton("2", insert);
            addButton("3", insert);
            addButton("-", command);
    
            //第四行按钮
            addButton("0", insert);
            addButton(".", insert);
            addButton("=", command);
            addButton("+", command);
    
            add(panel, BorderLayout.CENTER);//将按钮布置在窗口中央位置
        }
        public void addButton(String label, ActionListener listener)//开始添加按钮
        {
            JButton button = new JButton(label);
            button.addActionListener(listener);
            panel.add(button);
        }
    
        public class InsertAction implements ActionListener//用于获取按钮数值
        {
            public void actionPerformed(ActionEvent event)//点击按钮后发生的反应
            {
                String input = event.getActionCommand();//获取被点击按钮的数值(对应上面的insertif (start)//如果为真(即点击按钮获取到数值),前面已定义starttrue,则:
                {
                    display.setText("");//将该数值显示到最上面的框中(此框已在上面定义)
                    start = false;
                }
                display.setText(display.getText() + input);//将获取的按钮数值开始展示在框内
            }
        }
    
        //下面方法是进行运算第一步,由于”-“可能是性质符号,而不是运算符号,所以先对”-“进行处理
        public class CommandAction implements ActionListener//执行计算操作前对”-“进行处理
        {
            public void actionPerformed(ActionEvent event)//点击按钮后发生的反应
            {
                String command = event.getActionCommand();//获取按钮的内容(即运算符号,对应上面的commandif (start)//如果为真(即点击了按钮并获取到运算符号的信息),则开始:
                {
                    if (command.equals("-"))//如果点击的按钮为”-“
                    {
                        display.setText(command);//显示在最上面的框内(表示一个负号,此时为负数)
                        start = false;//则让start变成false,防止再次被当作负号处理(例如依次输入”1“”-“”-“”1“则有一个”-“为减号)
                    }
                    else lastCommand = command;//不是”-“则直接进行计算操作
                }
                else
                {
                    calculate(Double.parseDouble(display.getText()));//如果没有输入运算符号也直接进行计算操作(例如输入1-2,此时一个”-“直接作为运算符号)
                    lastCommand = command;
                    start = true;
                }
            }
        }
    
        public void calculate(double x)
        {
            if (lastCommand.equals("+")) result += x;//点击按钮”+“后进行加法运算
            else if (lastCommand.equals("-")) result -= x;//点击按钮”-“后进行减法运算
            else if (lastCommand.equals("*")) result *= x;//点击按钮”*“后进行乘法运算
            else if (lastCommand.equals("/")) result /= x;//点击按钮”/“后进行除法运算
            else if (lastCommand.equals("=")) result = x;//点击按钮”=“后进行等于运算
            display.setText("" + result);//在上面的框内显示出计算结果result
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月29日
  • 已采纳回答 12月21日
  • 修改了问题 12月18日
  • 创建了问题 12月18日

悬赏问题

  • ¥30 informer时间序列预测
  • ¥20 SSR引物多态性分析
  • ¥15 大漠插件在Win11易语言注册调用和免注册灵异事件,VS上注册调用完全没问题
  • ¥15 Addressable缓存机制做热更新的问题
  • ¥15 微信开发者工具vant组件
  • ¥15 iPhone iCloud云盘资料删除,MAC丢失50多G桌面资料
  • ¥20 希望各位学长可以给我答疑
  • ¥20 Linux实现: 客户端(cli01)通过TCP(或UDP)连接到聊天服务器(serv)进行聊天。
  • ¥15 (标签-matlab|关键词-m3)
  • ¥20 自制cifar10数据集,生成的batch缺少key:b