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语言程序设计与数据结构》
欢迎评论区指出不足之处,谢绝打赏。
以上如有侵权,请联系删除。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)