gysgynus 2022-12-21 12:04 采纳率: 87.5%
浏览 29
已结题

画出面向对象程序的类结构图


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
    }
}


  • 写回答

1条回答 默认 最新

  • Huazie 全栈领域优质创作者 2022-12-21 16:00
    关注
    • idea 右键 你要的类, 选择 如下:

    img

    • 然后在弹出的选择 Java Class Diagram

    • 最后把其他的类拖入 这个页面,然后右键 Show Dependencies

    img

    img

    PS: 类图中,自己可以右键选择展示 其他的内容,比如展示方法,成员变量等等

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败