第一次实现简陋计算器
实验内容及其实验要求
1.按下数字或者运算符时,在文本框中显示相应的内容
如下图
计算器面板的实现在另一篇文章有详细注释
这里完成了前四点 第五点在另一篇文章完成
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
public class Test03{
/*public Test01(String title){
super(title);
setLayout(new BorderLayout(2,2));
add(new JTextField(5), "North");
add(new JPanel(new GridBagLayout()), "Center");
add(new JPanel(new FlowLayout()), "South");*/
public static void main(String[] args){
//这里是用于计算所创建的列表
//List cheng = new List();
String str[] = {"%","CE","C","<-","7","8","9","*","4","5","6","-","1","2","3","+"};
Font sansSerif = new Font("Times", Font.BOLD, 12);
JFrame frame = new JFrame("计算器");
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
JPanel jPanel3 = new JPanel();
jPanel3.setLayout(new GridLayout(1,3,2,2));
JButton jButton1 = new JButton("0");
JButton jButton2 = new JButton(".");
JButton jButton3 = new JButton("=");
/* String text = jButton2.getText();
System.out.println(text);
*/
JTextField jTextfield = new JTextField(5);
jTextfield.setFont(sansSerif);
//这里是一个匿名内部类完成动作监听 当鼠标点击会发生actionPerformed()方法内的事件
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//显示的文字
//这里表示将文本框设置为文本框本来的内容追加按钮本身的内容
jTextfield.setText(jTextfield.getText()+jButton1.getText());
}
});
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//同上
jTextfield.setText(jTextfield.getText()+jButton2.getText());
/*jTextField.setBackground();*/
}
});
jButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//显示的文字
jTextfield.setText(jTextfield.getText()+jButton3.getText());
}
});
jPanel3.add(jButton1);
jPanel3.add(jButton2);
jPanel3.add(jButton3);
jPanel2.setLayout(new GridLayout(4,4,2,2));
JButton btn[] = new JButton[str.length];
for(int i = 0;i<str.length;i++){
btn[i] = new JButton(str[i]);
jPanel2.add(btn[i]);
jPanel2.setFont(sansSerif);
//外部类定义一个数等于i
int finalI = i;
if (i == 1) {
btn[1].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("这里是CE");
//设置index的初始值为0
int index = 0;
String text1 = jTextfield.getText();
System.out.println(text1);
//System.out.println(text1.charAt(text1.length()-2));
//将文本内容从后到前依次遍历 知道找到+符号时,令index等于将此时循环的i
for (int i = (text1.length() - 1); i >= 0; i--) {
if (text1.charAt(i) =='-'||text1.charAt(i) =='+'||text1.charAt(i) =='*'||text1.charAt(i) =='%') {
System.out.println("相等");
index = i;
System.out.println(index);
//========================当找到第一个符号就要跳出本次循环========================
//========================当找到第一个符号就要跳出本次循环========================
//========================当找到第一个符号就要跳出本次循环========================
//========================当找到第一个符号就要跳出本次循环========================
//========================当找到第一个符号就要跳出本次循环========================
//========================当找到第一个符号就要跳出本次循环========================
break;
}
}
//字符串截取,我们所截取到的+号前的数据来组成新的字符串
String result = text1.substring(0,index);
//显示结果
jTextfield.setText(result);
}
});
}
else if (i == 2){
btn[2].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//这里是一个C按钮
System.out.println("这里是C");
//直接清空文本框
jTextfield.setText("");
}
});
}
else if (i == 3){
btn[3].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("这里是退格键");
//这里是一个退格键,我们获得字符串的长度,将其截取为0到length-1的新字符串
int length = jTextfield.getText().length();
//截取0到length-1
String result = jTextfield.getText().substring(0,length-1);
jTextfield.setText(result);
}
});
}else if (i == 7){
btn[7].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jTextfield.setText(jTextfield.getText()+btn[finalI].getText());
System.out.println("这里是乘法");
}
});
}
else {
btn[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//循环,每点击一个键的时候,将文本框设置为原来的追加当前键的值
jTextfield.setText(jTextfield.getText()+btn[finalI].getText());
}
});
}
}
jPanel1.setSize(300,200);
jPanel1.setLayout(new BorderLayout(2,2));
jPanel1.add(jTextfield, "North");
jPanel1.add(jPanel2, "Center");
jPanel1.add(jPanel3, "South");
frame.setContentPane(jPanel1);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.pack();
frame.setVisible(true);
}
}