import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Awt {
public static void addButton(JButton[] button,JPanel panel){//把按钮添加到面板中
for(int i=0;i<button.length;i++){
panel.add(button[i]);
}
}
public static void createButton(JButton[] button,String s[]){//创建指定标题的按钮
for(int i=0;i<s.length;i++){
button[i]=new JButton(""+s[i]);
}
}
public static void SetButtonColor(JButton[] button){//设置面板上字体的颜色
for(int i=0;i<button.length;i++){
button[i].setForeground(Color.BLUE);
}
}
public static boolean contain1(String s) {//判断字符串中是否含有"+"
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) == '+') {
return true;
}
}
return false;
}
public static boolean contain2(String s) {//判断字符串中是否含有"-"
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) == '-') {
return true;
}
}
return false;
}
public static boolean contain3(String s) {//判断字符串中是否含有"*"
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) == '*') {
return true;
}
}
return false;
}
public static boolean contain4(String s) {//判断字符串中是否含有"/"
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) == '/') {
return true;
}
}
return false;
}
public static void main(String[] args) {
final JFrame frame = new JFrame("计算器");
frame.setVisible(true);
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension di = toolkit.getScreenSize();
frame.setLocation((di.width - frame.WIDTH) / 2,
(di.height - frame.HEIGHT) / 2);
JMenuBar mb = new JMenuBar();
JMenu m1 = new JMenu("计算器C");
JMenuItem item11 = new JMenuItem("退出(Q) Ctrl+Q");
item11.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
m1.add(item11);
JMenu m2 = new JMenu("编辑E");
JMenuItem item1 = new JMenuItem("复制(C) Ctrl+C");
JMenuItem item2 = new JMenuItem("粘贴(V) Ctrl+V");
m2.add(item1);
m2.add(item2);
JMenu m3 = new JMenu("查看V");
JMenuItem item3 = new JMenuItem("基本(B) Ctrl+B");
JMenuItem item4 = new JMenuItem("高级 (A) Ctrl+A");
JMenuItem item5 = new JMenuItem("金融(F) Ctrl+F");
JMenuItem item6 = new JMenuItem("科学 (S) Ctrl+S");
JMenuItem item7 = new JMenuItem("显示千分位符(H) Ctrl+K");
m3.add(item3);
m3.add(item4);
m3.add(item5);
m3.add(item6);
m3.add(item7);
JMenu m4 = new JMenu("帮助H");
JMenuItem item9 = new JMenuItem("帮助(H) F1");
JMenuItem item10 = new JMenuItem("关于 (A) ");
m4.add(item9);
m4.add(item10);
mb.add(m1);
mb.add(m2);
mb.add(m3);
mb.add(m4);
frame.setJMenuBar(mb);
final JTextField tf = new JTextField("0");
tf.setBounds(115, 30, 120, 22);
tf.setHorizontalAlignment(JTextField.RIGHT);// 设置文本框中的文字为右对齐
JPanel p1 = new JPanel();
frame.add(tf, BorderLayout.NORTH);
JPanel p2 = new JPanel();
p2.setLayout(new GridLayout(5, 4, 5, 5));
String s[]={"sqrt","Backspace","CE","C","7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};
final JButton[] button=new JButton[20];
createButton(button,s);//创建20个按钮
SetButtonColor(button);//设置20个按钮的颜色
addButton(button,p2);//把20个按钮添加到面板中
frame.add(p2, BorderLayout.CENTER);
frame.setResizable(false);// 设置窗体为不可更改大小的
frame.pack();// 根据组件动态设置窗体大小
button[0].addActionListener(new ActionListener() {// 实现平方根按钮单击事件
public void actionPerformed(ActionEvent arg0) {
try {
String content = tf.getText();
Double d = Double.parseDouble(content);
if (d < 0) {
JOptionPane.showMessageDialog(frame, "负数不能开平方","格式错误的表达式", JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
double result = Math.sqrt(d);
tf.setText("" + result);
} catch (Exception e) {
JOptionPane.showMessageDialog(frame, "算式中只能输入数字","格式错误的表达式", JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
}
});
button[1].addActionListener(new ActionListener() {// 实现退格按钮的监听事件
public void actionPerformed(ActionEvent arg0) {
String content = tf.getText();
String newcontent = content.substring(0, content
.length() - 1);
tf.setText(newcontent);
}
});
button[2].addActionListener(new ActionListener() {// 实现清空按钮事件
public void actionPerformed(ActionEvent arg0) {
tf.setText("");
}
});
button[3].addActionListener(new ActionListener() {// 实现清空按钮事件
public void actionPerformed(ActionEvent arg0) {
tf.setText("");
}
});
for(int i=4;i<=17;i++){
button[i].addActionListener(new buttonAction(button[i],tf) );
}
button[18].addActionListener(new ActionListener() {// 实现=按钮的监听事件
public void actionPerformed(ActionEvent arg0) {
String s = tf.getText();
if (Awt.contain1(s)) {
String str[] = s.split("\\+");
try {
if(str[0].length()>1&&str[0].charAt(0)=='0'){
JOptionPane.showMessageDialog(frame,"数字不能以0开头", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
double result1 = Double.parseDouble(str[0])
+ Double.parseDouble(str[1]);
tf.setText("" + result1);
} catch (java.lang.NumberFormatException e) {
JOptionPane.showMessageDialog(frame,"算式中只能输入数字", "格式错误的表达式", JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
}
if (Awt.contain2(s)) {
try {
if (s.charAt(0) == '-') {
String news = s.substring(1, s.length());
String str[] = news.split("\\-");
double result2 = -(Double
.parseDouble(str[0]) + Double
.parseDouble(str[1]));
tf.setText("" + result2);
}
else {
String str[] = s.split("\\-");
if(str[0].length()>1&&str[0].charAt(0)=='0'){
JOptionPane.showMessageDialog(frame,"数字不能以0开头", "格式错误的表达式", JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
double result2 = Double.parseDouble(str[0])
- Double.parseDouble(str[1]);
tf.setText("" + result2);
}
} catch (java.lang.NumberFormatException e) {
JOptionPane.showMessageDialog(frame,"算式中只能输入数字", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
}
if (Awt.contain3(s)) {
String str[] = s.split("\\*");
try {
if(str[0].length()>1&&str[0].charAt(0)=='0'){
JOptionPane.showMessageDialog(frame,"数字不能以0开头", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
double result3 = Double.parseDouble(str[0])
* Double.parseDouble(str[1]);
tf.setText("" + result3);
} catch (java.lang.NumberFormatException e) {
JOptionPane.showMessageDialog(frame, "算式中只能输入数字", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
}
if (Awt.contain4(s)) {
String str[] = s.split("\\/");
try {
if(str[0].length()>1&&str[0].charAt(0)=='0'){
JOptionPane.showMessageDialog(frame,"数字不能以0开头", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
if (str[1].equals("0")) {
JOptionPane.showMessageDialog(frame,"******除数不能为0******", "格式错误的表达式",JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
double result4 = Double.parseDouble(str[0])
/ Double.parseDouble(str[1]);
tf.setText("" + result4);
} catch (java.lang.NumberFormatException e) {
JOptionPane.showMessageDialog(frame,
"算式中只能输入数字", "格式错误的表达式", JOptionPane.ERROR_MESSAGE);// 弹出一个对话框来显示错误信息
}
}
}
});
button[19].addActionListener(new buttonAction(button[19],tf) );
}
}
class buttonAction implements ActionListener{
private JButton button=null;
private JTextField tf=null;
public buttonAction(JButton button,JTextField tf){
this.button=button;
this.tf=tf;
}
public void actionPerformed(ActionEvent e) {
tf.setText(tf.getText()+button.getActionCommand());
}
}