import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import java.math.MathContext;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator {
//定义组件
private JFrame frame;
private JTextField field;
private JButton clearButton;
private JButton[] allButtons;
// private double od;
// private BigDecimal od;
private String os;
private int fi=-1;
public static final int ADD=0;
public static final int SUBTRACT=1;
public static final int MULIPLY=2;
public static final int DIVIDE=3;
//创建组件
public Calculator() {
frame=new JFrame("计算器");
field=new JTextField("0",19);
clearButton=new JButton("C");
String s="123+456-789*0.=/";
allButtons=new JButton[s.length()];
for (int i = 0; i < s.length(); i++) {
allButtons[i]=new JButton(s.charAt(i)+"");
}
}
//组件布局
private void init(){
frame.setLayout(new BorderLayout(3,3));
JPanel northPanel=new JPanel();
JPanel centerPanel=new JPanel();
northPanel.setLayout(new FlowLayout());
centerPanel.setLayout(new GridLayout(4,4,6,6));
northPanel.add(field);
northPanel.add(clearButton);
for (int i = 0; i < allButtons.length; i++) {
centerPanel.add(allButtons[i]);
}
frame.add(northPanel,BorderLayout.NORTH);
frame.add(centerPanel,BorderLayout.CENTER);
}
//设置样式
private void setStyle(){
clearButton.setFont(new Font("Courier New",Font.BOLD+Font.ITALIC,16));
Font font=new Font("Courier New",Font.PLAIN,14);
for (int i = 0; i < allButtons.length; i++) {
allButtons[i].setFont(font);
}
field.setHorizontalAlignment(JTextField.RIGHT);
field.setEditable(false);
field.setBackground(Color.WHITE);
field.setForeground(new Color(0,0,0));
frame.setResizable(false);
}
private void addEventHandler(){
clearButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//C按钮
System.out.println("C");
fi=-1;
os=null;
field.setText("0");
}
});
String n="0123456798.";
final String f="+-*/";
for (int i = 0; i < allButtons.length; i++) {
final String s=allButtons[i].getActionCommand();
if(n.indexOf(s)!=-1){
allButtons[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//数字按钮包括.
System.out.println("数字");
if("除数不能为零".equals(field.getText())){
field.setText("0");
}
//当前文本框中是符号,点击数字按钮时
if(f.indexOf(field.getText())!=-1){
field.setText("0");
}
//当前文本框中显示0,点击数字按钮不包括小数点时
if("0".equals(field.getText())&&!".".equals(s)){
field.setText("");
}
//当前点击的是小数点,多次点击
if(".".equals(s)&&!field.getText().matches("\\d+")){
return;
}
field.setText(field.getText()+s);
}
});
}
if(f.indexOf(s)!=-1){
allButtons[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//符号按钮
System.out.println("符号");
// od=Double.parseDouble(field.getText());
// od=new BigDecimal(field.getText());
if(fi==-1){
os=field.getText();
}
field.setText(s);
fi=f.indexOf(s);
}
});
}
if("=".equals(s)){
allButtons[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//计算按钮
System.out.println("=");
try {
//少条件点击等于号时
if(os==null||fi==-1||f.indexOf(field.getText())!=-1||"除数不能为零".equals(field.getText())){
return;
}
String ns=field.getText();
BigDecimal od=new BigDecimal(os);
// double nd=Double.parseDouble(field.getText());
BigDecimal nd=new BigDecimal(ns);
// System.out.println(od+" "+fi+" "+nd);
// double result=0.0;
BigDecimal result=null;
switch (fi) {
case ADD:
// result=od+nd;
result=od.add(nd);
break;
case SUBTRACT:
// result=od-nd;
result=od.subtract(nd);
break;
case MULIPLY:
// result=od*nd;
result=od.multiply(nd);
break;
case DIVIDE:
// result=od/nd;
result=od.divide(nd,MathContext.DECIMAL64);
break;
}
field.setText(result.doubleValue()+"");
} catch (ArithmeticException e1) {
field.setText("除数不能为零");
}
}
});
}
}
}
//显示组件
public void show(){
init();
setStyle();
addEventHandler();
frame.setSize(290,180);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Calculator().show();
}
}
java 计算器。
最新推荐文章于 2024-08-25 14:23:08 发布