package main.java;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JFrameTest {
private JFrame jf;
private JTextField jtf;
boolean flag=false;
double firsetNumber=0;
String op="";
double secondNumber=0;
double result=0;
public JFrameTest() {
// 创建窗口
jf = new JFrame();
jf.setTitle("计算器");
jf.setBounds(400, 300, 400, 400);
// 设置关闭操作
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jf.setLayout(new BorderLayout());
// 工具栏:放置 JComboBox
JPanel toolBar = new JPanel();
toolBar.setLayout(new FlowLayout(FlowLayout.LEFT)); // 左对齐
JComboBox<String> box1 = new JComboBox<>();
box1.addItem("查看(v)");
box1.addItem("1");
box1.addItem("2");
JComboBox<String> box2 = new JComboBox<>();
box2.addItem("编辑(E)");
box2.addItem("1");
box2.addItem("2");
JComboBox<String> box3 = new JComboBox<>();
box3.addItem("帮助(H)");
box3.addItem("1");
box3.addItem("2");
toolBar.add(box1);
toolBar.add(box2);
toolBar.add(box3);
// 文本框
jtf = new JTextField();
jtf.setEditable(false); // 设置为不可编辑
jtf.setFont(new Font("Arial", Font.BOLD, 24)); // 设置字体
jtf.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐
jtf.setPreferredSize(new Dimension(300, 50)); // 设置高度
// 创建一个新的面板来容纳工具栏和文本框
JPanel northPanel = new JPanel();
northPanel.setLayout(new BorderLayout());
northPanel.add(toolBar, BorderLayout.NORTH);
northPanel.add(jtf, BorderLayout.CENTER);
jf.add(northPanel, BorderLayout.NORTH);
// 按钮面板
JPanel jp1 = new JPanel();
jp1.setLayout(new GridLayout(6, 5, 5, 5)); // 6行5列,间距为5
jp1.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // 设置边距
// 定义按钮的标签
String[] buttons = {
"MC", "MR", "MS", "M+", "M-",
"<--", "CE", "C", "/", "%",
"7", "8", "9", "*", "?",
"4", "5", "6", "-", "?",
"1", "2", "3", "+", "?",
"0", ".", "=", "?", "?"
};
// 添加按钮到面板
for (String label : buttons) {
JButton jb = new JButton(label);
jb.addActionListener(new MyButtonListener());
jb.setFont(new Font("Arial", Font.PLAIN, 18)); // 设置按钮字体
jp1.add(jb);
}
// 将按钮面板添加到窗口中间区域
jf.add(jp1, BorderLayout.CENTER);
jf.setVisible(true);
}
//事件处理fdf
private class MyButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
String command=e.getActionCommand();
if(command.charAt(0)>='0'&&command.charAt(0)<='9'){
//数字按钮
if(flag){
jtf.setText(command);
flag=false;
}else {
jtf.setText(jtf.getText()+command);
}
}else if(command.equals("C")){
jtf.setText("");
firsetNumber=0;
op="";
}else if(command.equals("=")){
secondNumber=Double.parseDouble(jtf.getText());//这样可以连续运算
result=myCalculate(firsetNumber,secondNumber,op);
//jtf.setText(String.valueOf(result));
String leftText="=";
String rightText=String.valueOf(result);
int totalWidth=55;//正好
int paddingLength=totalWidth-leftText.length()-rightText.length();
System.out.println("计算完成");
if(paddingLength>0){
String padding =" ".repeat(paddingLength);
jtf.setText(leftText+padding+rightText);
}else
{
jtf.setText(leftText+rightText);
}
op="";
}else if(command.equals("+")||command.equals("-")||command.equals(("*"))||command.equals("/")){
firsetNumber=Double.parseDouble(jtf.getText());
op=command;
flag=true;
String leftText=op;
String rightText=jtf.getText();
int totalWidth=55;//正好
int paddingLength=totalWidth-leftText.length()-rightText.length();
//System.out.println(paddingLength);
if(paddingLength>0){
String padding =" ".repeat(paddingLength);
jtf.setText(leftText+padding+rightText);
}else
{
jtf.setText(leftText+rightText);
}
}
}
}
private double myCalculate(double a,double b,String op){
switch(op){
case "+":
return a+b;
case "-":
return a-b;
case "*":
return a*b;
case "/":
if(b!=0){
return a/b;
}else {
JOptionPane.showMessageDialog(jf,"除数不能为零", "错误", JOptionPane.ERROR_MESSAGE);
return 0;
}
default:
return 0;
}
}
public static void main(String[] args) {
JFrameTest test=new JFrameTest();
}
}