JavaSwing实现简陋计算器和出题器

JavaSwing实现简陋计算器和出题器,第1张

1.概要

使用JavaSwing进行界面搭建,使用Java提供的特定函数来实现解析表达式运算的目的,使用Math.rondom()方法来实现随机出题,不考虑什么性能和安全之类,咱就是说功能先给他弄出来。

布局:

结果:


2.一些问题的处理
输入输出问题:输入使用JTextField进行输入框输入,利用其getText()方法返回String类型

 
算数运算问题:首先,生成脚本引擎实例,使用引擎的eval()函数解析字符串表达式,返回计算结果,根据不同情况来转化数据类型,最后使用Math.abs()方法进行差值比较验证答案,输出对应文字表达。


输入框光标驻留问题:点击按钮触发事件时,输入框可以输入,但失去了光标,不利于用户,我们可以再加入两个int型变量记录按钮被点击时光标最后停留的文本区域和光标坐标,按钮事件先进行 *** 作,按钮事件最后一步是返还光标----------先让文本使用requestFocus(),再用setCaretPosition()设置光标位置,这样看起来就像光标驻留在了某个特定位置了,具体参见代码行159~202行注意:点击按钮,文本区失去焦点这个过程,是先触发文本区的失去焦点事件,再触发按钮的点击事件!!(有点离谱对吧,可以自己输出试试);光标计数从左到右,从0开始。


输入框内容修改问题:利用StringBuilder类来进行修改和作为缓冲,点击按钮后先获取当前文本区内容,再根据光标位置进行内容追加(防止用户先用键盘输入再用数字键盘输入),最后使用StringBuild中的toString方法返回字符串,这个字符串又当作文本JTextField类型中setText()方法的参数即可。


提示和换行问题:JLabel中输入的String类型可包含HTML表达,使用简单的表达可以达到换行加粗标红等基本处理。


注意事项:

Ⅰ.请使用Java1.8(即java8)运行程序,高版本的Java删除了代码中使用的部分api(例如Java17.0.3就不能良好运行本程序)
Ⅱ.文件代码中包含部分中文注释,可使用"javac -encoding UTF-8 CalculatorDemo.java"来解决
Ⅲ.双击jar文件使用的版本不一定是java1.8请注意(可能安装了多个版本,注册表可能有选择问题)
Ⅳ.图片资源放在与.java文件同一个文件夹下,且名字为dance.gif,不需要图片就将代码行78~80,82注释即可(不注释也完全没问题),或者你把你图片放相同位置改一下这几行代码,没图并不影响运行,只是不显示。
3.代码如下

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;

//计算引入(没有自己写,直接调用去了)
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class CalculatorDemo {
    // 类的全局变量区
    String messageLabelHelpString = "提示
1.第一个框是计算框,输入计算式或者按出来,自由输入时才允许使用括号,键盘上没有。
2.第二个框是你答案的输入框,下面是结果提示区。
3.等号与确认键相同,看不见全文就全屏.
4.输入错误就鼠标点击直接修改,或者点击等号清屏重写。
5.注意!当小数位数多于5位时,计算机可能出现误差,判定标准为你的答案与计算机结果误差小于0.0000000000001时回答正确!
";// 使用html表达提示区 int choiceText_flag = 0;// 两个文本框被选定的情况 int lastCaretposition = 0;// 记录光标最后停留位置 StringBuilder buffer1 = new StringBuilder();// 修改两个文本区的字符串所用的stringbuilder缓冲区 StringBuilder buffer2 = new StringBuilder(); JFrame contentPane;//最大的Fram框架 JPanel base;//JPanel容器,它包含了接下来使用的其他JPanel容器等中间容器 JLabel messageLabel;//消息框 JTextField textFieldInputText_1;//输入文本1 JTextField textFieldInputText_2;//输入文本2 ScriptEngineManager manager = new ScriptEngineManager();// 创建脚本执行引擎 ScriptEngine engine = manager.getEngineByName("js");// 初始化,写js,或者JavaScript,或者javascript等特定名称 // 构造函数 public CalculatorDemo() { CalculatorDemo();//调用界面生成函数 } private void CalculatorDemo()// 界面调用函数(生成) { contentPane = new JFrame("计算器和出题机"); // 创建窗体,标记窗体名 contentPane.setBounds(100, 100, 400, 700); // 设置窗体位置和大小 contentPane.addWindowListener(new WindowAdapter() {// 创建窗口事件监听 public void windowClosing(WindowEvent windowEvent) {// 窗口关闭事件 System.exit(0);// } }); base = new JPanel();// 创建内容面板(零级div) base.setLayout(new BorderLayout(0, 0)); // 设置内容面板为边界布局 base.setBorder(new EmptyBorder(5, 5, 5, 5));// 设置边界间隔值为5像素 contentPane.add(base);// 添加基本div // ........................................................... JPanel panelText = new JPanel(); // 新建面板用于保存文本框 panelText.setLayout(new BorderLayout(0, 0)); base.add(panelText, BorderLayout.NORTH); // 将面板放置在边界布局的北部 textFieldInputText_1 = new JTextField(); // 新建文本框(输入框) textFieldInputText_2 = new JTextField(); // 新建文本框(输入框) // textFieldInputText_1.set();//尝试修改间隔 messageLabel = new JLabel("这里是结果默认输出框位,第二个框输入答案喔ლ(╹ε╹ლ) ");// 新建信息框(输出框----label型) textFieldInputText_1.setHorizontalAlignment(SwingConstants.RIGHT); // 文本框中的文本使用右对齐 textFieldInputText_2.setHorizontalAlignment(SwingConstants.RIGHT); // 文本框中的文本使用右对齐 messageLabel.setHorizontalAlignment(SwingConstants.CENTER);// 消息格式居中 textFieldInputText_1.setColumns(18); // 设置文本框的列数是18 textFieldInputText_2.setColumns(18); // 设置文本框的列数是18 panelText.add(textFieldInputText_1, BorderLayout.NORTH); // 将文本框增加到面板中 panelText.add(textFieldInputText_2, BorderLayout.CENTER); // 将文本框增加到面板中 panelText.add(messageLabel, BorderLayout.SOUTH); // 将文本框增加到面板中 // ........................................................... JPanel otherAreas = new JPanel(); // 新建面板用于保存按钮(一级div) base.add(otherAreas, BorderLayout.CENTER); // 将面板放置在边界布局的中央 otherAreas.setLayout(new BorderLayout(0, 0)); // 使用边界布局 JPanel buttons = new JPanel(); // 新建面板用于保存按钮(二级div) buttons.setLayout(new GridLayout(5, 5, 5, 5)); // 面板使用网格4X4布局,存放按钮 JPanel message_picture_random = new JPanel(); // 新建面板用于保存按钮(二级div) message_picture_random.setLayout(new BorderLayout(0, 0)); // 使用边界布局 JButton buttonRandom = new JButton("随机出题"); // 新建按钮 JLabel messageLabelHelp = new JLabel(messageLabelHelpString);// 新建信息帮助框 messageLabelHelp.setHorizontalAlignment(SwingConstants.CENTER);// 消息格式居中 ImageIcon image = new ImageIcon( new ImageIcon("dance.gif").getImage().getScaledInstance(250, 152, Image.SCALE_DEFAULT));// 更改图片规格 JLabel picture = new JLabel(image);// 新建图片框 message_picture_random.add(messageLabelHelp, BorderLayout.NORTH); // 应用提示栏位 message_picture_random.add(picture, BorderLayout.CENTER); // 应用图片栏位 message_picture_random.add(buttonRandom, BorderLayout.SOUTH); // 应用按钮 otherAreas.add(buttons, BorderLayout.NORTH);// 添加到pane2中 otherAreas.add(message_picture_random, BorderLayout.SOUTH);// 添加到pane2中 // 这是一群按钮,顺序添加 JButton button01 = new JButton("7"); // 新建按钮 buttons.add(button01); // 应用按钮 JButton button02 = new JButton("8"); // 新建按钮 buttons.add(button02); // 应用按钮 JButton button03 = new JButton("9"); // 新建按钮 buttons.add(button03); // 应用按钮 JButton button04 = new JButton("+"); // 新建按钮 buttons.add(button04); // 应用按钮 JButton button05 = new JButton("4"); // 新建按钮 buttons.add(button05); // 应用按钮 JButton button06 = new JButton("5"); // 新建按钮 buttons.add(button06); // 应用按钮 JButton button07 = new JButton("6"); // 新建按钮 buttons.add(button07); // 应用按钮 JButton button08 = new JButton("-"); // 新建按钮 buttons.add(button08); // 应用按钮 JButton button09 = new JButton("3"); // 新建按钮 buttons.add(button09); // 应用按钮 JButton button10 = new JButton("2"); // 新建按钮 buttons.add(button10); // 应用按钮 JButton button11 = new JButton("1"); // 新建按钮 buttons.add(button11); // 应用按钮 JButton button12 = new JButton("*"); // 新建按钮 buttons.add(button12); // 应用按钮 JButton button13 = new JButton("0"); // 新建按钮 buttons.add(button13); // 应用按钮 JButton button14 = new JButton("."); // 新建按钮 buttons.add(button14); // 应用按钮 JButton button15 = new JButton("="); // 新建按钮 buttons.add(button15); // 应用按钮 JButton button16 = new JButton("/"); // 新建按钮 buttons.add(button16); // 应用按钮 contentPane.setVisible(true); // 布局结束,现在开始监听与事件处理 button01.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button02.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button03.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button04.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button05.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button06.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button07.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button08.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button09.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button10.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button11.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button12.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button13.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button14.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button15.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button16.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 buttonRandom.addActionListener(new ButtonClickListener());// 为按钮添加点击事件 button01.setActionCommand("7");// 设置信息 button02.setActionCommand("8"); button03.setActionCommand("9"); button04.setActionCommand("+"); button05.setActionCommand("4"); button06.setActionCommand("5"); button07.setActionCommand("6"); button08.setActionCommand("-"); button09.setActionCommand("3"); button10.setActionCommand("2"); button11.setActionCommand("1"); button12.setActionCommand("*"); button13.setActionCommand("0"); button14.setActionCommand("."); button15.setActionCommand("="); button16.setActionCommand("/"); buttonRandom.setActionCommand("Random"); textFieldInputText_1.addFocusListener(new FocusListener() {// 设置表达区焦点监听 public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { choiceText_flag = 1; lastCaretposition = textFieldInputText_1.getCaretPosition();// 获取光标最后停留位置 lastCaretposition++;// 光标位置自增 } }); textFieldInputText_2.addFocusListener(new FocusListener() {// 设置输入区焦点监听 public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { // System.out.println("先失去焦点"); choiceText_flag = 2; lastCaretposition = textFieldInputText_2.getCaretPosition();// 获取光标最后停留位置 lastCaretposition++;// 光标位置自增 } }); } // 事件处理函数,处理事件 // 事件先失去焦点,再触发按钮 private class ButtonClickListener implements ActionListener { public void actionPerformed(ActionEvent e) {// 按钮激活后的行为 String command = e.getActionCommand();// 获取按钮信息 if (command.equals("1")) {// 做出行为 if (choiceText_flag == 1) { // System.out.println("先按钮触发"); buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "1");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "1");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("2")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "2");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus(); textFieldInputText_1.setCaretPosition(lastCaretposition); } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "2");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("3")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "3");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "3");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("4")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "4");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "4");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("5")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "5");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "5");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("6")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "6");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "6");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("7")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "7");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "7");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("8")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "8");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "8");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("9")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "9");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "9");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("0")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "0");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "0");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("+")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "+");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "+");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("-")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "-");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "-");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("*")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "*");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "*");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("/")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, "/");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, "/");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals(".")) { if (choiceText_flag == 1) { buffer1.replace(0, buffer1.length(), textFieldInputText_1.getText()); buffer1.insert(lastCaretposition - 1, ".");// 信息追加 textFieldInputText_1.setText(buffer1.toString());// 刷新文本区内容 textFieldInputText_1.requestFocus();// 重新获得焦点 textFieldInputText_1.setCaretPosition(lastCaretposition);// 刷新光标位置 } else if (choiceText_flag == 2) { buffer2.replace(0, buffer2.length(), textFieldInputText_2.getText()); buffer2.insert(lastCaretposition - 1, ".");// 信息追加 textFieldInputText_2.setText(buffer2.toString());// 刷新文本区内容 textFieldInputText_2.requestFocus(); textFieldInputText_2.setCaretPosition(lastCaretposition); } } else if (command.equals("=")) { try {//try-catch语句捕捉错误提示 String s3;// 中间件 if (Math.abs(((engine.eval(textFieldInputText_1.getText()) instanceof Integer) ? (int) engine.eval(textFieldInputText_1.getText()) : (double) engine.eval(textFieldInputText_1.getText())) - ((engine.eval(textFieldInputText_2.getText()) instanceof Integer) ? (int) engine.eval(textFieldInputText_2.getText()) : (double) engine.eval(textFieldInputText_2.getText()))) < 0.0000000000001) s3 = "在计算机误差范围内,回答正确";// 使用Maath.abs()方法比较答案差距 else s3 = "回答错误"; messageLabel.setText( "答案是:" + engine.eval(textFieldInputText_1.getText()) + " 你的答案是:" + engine.eval(textFieldInputText_2.getText()) + s3);// 拼接输出字符串 } catch (NullPointerException ex) { messageLabel.setText("输入框留空(或者使用了非java8的运行环境)"); } catch (ScriptException ex) { messageLabel.setText("输入错误"); } buffer1.delete(0, buffer1.length());// 算术表达式内容清空 buffer2.delete(0, buffer1.length());// 答题内容清空 textFieldInputText_1.setText("");// 算式区内容清空 textFieldInputText_2.setText("");// 答题区内容清空 lastCaretposition = 0;// 光标数据清空 textFieldInputText_1.requestFocus();// 焦点锁定回第一输入框 } else { // 随机出题,两位小数的数据加减乘除,整数基本概率为0 double guesschoice = Math.random(); String guess; if (guesschoice > 0 && guesschoice < 0.25) { guess = String.format("%.2f", Math.random() * 100 * Math.random()) + "+" + String.format("%.2f", Math.random() * 100 * Math.random()); } else if (guesschoice >= 0.25 && guesschoice < 0.5) { guess = String.format("%.2f", Math.random() * 100 * Math.random()) + "-" + String.format("%.2f", Math.random() * 100 * Math.random()); } else if (guesschoice >= 0.5 && guesschoice < 0.75) { guess = String.format("%.2f", Math.random() * 100 * Math.random()) + "*" + String.format("%.2f", Math.random() * 100 * Math.random()); } else { guess = String.format("%.2f", Math.random() * 100 * Math.random()) + "/" + String.format("%.2f", Math.random() * 100 * Math.random()); } textFieldInputText_1.setText(guess);// 输出题目到第一个栏位 messageLabel.setText("随机出题");// 信息提示 } } } // ........................................................... public static void main(String[] args) { CalculatorDemo frame = new CalculatorDemo();// 关于什么安全性问题,咱就不考虑了,偷懒了,最后才注意到,懒得改了,直接生成算了。 } }


4.参考文档和图片引用

布局管理:(7条消息) Java-Swing编程介绍_cb_east的博客-CSDN博客_java swinghttps://blog.csdn.net/cb_east/article/details/79949415

界面参考:(7条消息) java 计算器swing_Java Swing计算器界面的实现_weixin_26642481的博客-CSDN博客https://blog.csdn.net/weixin_26642481/article/details/114062147事件处理:

(7条消息) java swing 事件_Swing事件处理_carwinloo的博客-CSDN博客https://blog.csdn.net/weixin_29997937/article/details/114479025光标处理:

(7条消息) java jtextfield 光标_JTextField添加焦点监听时设置光标可用性及位置_FieryTiger的博客-CSDN博客https://blog.csdn.net/weixin_29870701/article/details/114133644(7条消息) java JTextField编辑框自动获取焦点光标,以及对编辑框内容监听_阳光灿烂的夜的博客-CSDN博客https://blog.csdn.net/qq_38629981/article/details/107110307?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1-107110307-blog-114133644.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1-107110307-blog-114133644.pc_relevant_paycolumn_v3&utm_relevant_index=1

 字符串表达式:

(7条消息) Java解析字符串计算表达式_18岁的许嵩的博客-CSDN博客_java解析字符串数学公式https://blog.csdn.net/qq_31283333/article/details/108088566javaScriptEngine使用(支持JavaScript脚本,eval()函数等) - 百度文库 (baidu.com)https://wenku.baidu.com/view/84b0b309ccc789eb172ded630b1c59eef8c79a82.html图片插入

请教:如何在JLabel上显示图片,并且图片自适应jLabel的大小_百度知道 (baidu.com)https://zhidao.baidu.com/question/557064096.html图片引用源(作者主页)

挲夜的个人空间_哔哩哔哩_bilibilihttps://space.bilibili.com/6994502

HTML表达

HTML 教程 | 菜鸟教程 (runoob.com)https://www.runoob.com/html/html-tutorial.htmljar包导出

(7条消息) VSCode导出jar(超简单)_gggg达的博客-CSDN博客_vscode 打包jarhttps://blog.csdn.net/weixin_43798842/article/details/118936341?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-118936341-null-null.pc_agg_new_rank&utm_term=vscode%E9%A1%B9%E7%9B%AE%E6%89%93%E5%8C%85jar%E8%BF%90%E8%A1%8C&spm=1000.2123.3001.4430Java语句表达参考书籍《Java语言程序设计与数据结构》

欢迎评论区指出不足之处,谢绝打赏。

以上如有侵权,请联系删除。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/921754.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存