package calculator;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class calculator1 extends JFrame implements ActionListener
{
private final String[] K = {
"Backspace", "CE", "C", "=", "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", "+/-", ".", "+"
};
private JButton k[] = new JButton[K.length];
private JTextField t = new JTextField("0");
private double resultNum = 0.0;
private String operator = "=";
private boolean firstDigit = true;
private boolean operateValidFlag = true;//操作是否合法
public calculator1()
{
super();
init();
this.setBackground(Color.black);
this.setTitle("82 張天宇");
this.setSize(600, 600);
this.setLocation(800, 50);
} //創建 主界面并修改格式
private void init()
{
t.setHorizontalAlignment(JTextField.RIGHT);
t.setBackground(Color.white);
t.setFont(new Font("Microsoft Uighur", Font.ITALIC, 30));
t.setColumns(10);
t.setEditable(false); //創建上方文本框并修改格式
JPanel calckeysPanel = new JPanel();
calckeysPanel.setLayout(new GridLayout(5, 4, 10, 10));
for(int i = 0; i < K.length; i++)
{
k[i] = new JButton(K[i]);
calckeysPanel.add(k[i]);
k[i].setForeground(Color.white);
k[i].setBackground(Color.black);
Font fnt = new Font("Serief", Font.BOLD, 18);
k[i].setFont(fnt);
Font fn = new Font("Serief", Font.BOLD, 30);
calckeysPanel.setBorder(new EmptyBorder(10, 10, 20, 20));
} //插入按鈕并修改格式
JPanel panel1 = new JPanel();
panel1.setLayout(new BorderLayout(10, 10));
panel1.add("Center", calckeysPanel);
JPanel toptext = new JPanel();
toptext.setLayout(new BorderLayout());
toptext.add("Center", t); //創建
getContentPane().setLayout(new BorderLayout(20, 20));
getContentPane().add("North", toptext);
getContentPane().add("Center", panel1); //插入
for(int i = 0; i < K.length; i++)
{
k[i].addActionListener(this);
}
}
public void actionPerformed(ActionEvent e)
{
String label = e.getActionCommand();
if(label.equals(K[0]))
{
handleBackspace();
}
else if(label.equals(K[1]))
{
t.setText("0");
}
else if(label.equals(K[2]))
{
handleC();
}
else if("0123456789.".indexOf(label) >= 0)
{
handleNumber(label);
}
else
{
handleOperator(label);
}
} //創建
private void handleBackspace()
{
String text = t.getText();
int i = text.length();
if(i > 0)
{
text = text.substring(0, i - 1);
if(text.length() == 0)
{
t.setText("0");
firstDigit = true;
operator = "=";
}
else
{
t.setText(text);
}
}
} //處理
private void handleNumber(String key)
{
if(firstDigit)
{
// 輸入
t.setText(key);
}
else if((key.equals(".")) && (t.getText().indexOf(".") < 0))
{
t.setText(t.getText() + ".");
}
else if(!key.equals("."))
{
t.setText(t.getText() + key);
}
firstDigit = false;
}
private void handleC()
{
// 初始化
t.setText("0");
firstDigit = true;
operator = "=";
}
private void handleOperator(String key)
{
if(operator.equals("/"))
{
if(getNumberFromText() == 0.0)
{
// 操作不合法
operateValidFlag = false;
t.setText("除數不能為零");
}
else
{
resultNum /= getNumberFromText();
}
}
else if(operator.equals("+"))
{
resultNum += getNumberFromText();
}
else if(operator.equals("-"))
{
resultNum -= getNumberFromText();
}
else if(operator.equals("*"))
{
resultNum *= getNumberFromText();
}
else if(operator.equals("+/-"))
{
resultNum = resultNum * (-1);
}
else if(operator.equals("="))
{
resultNum = getNumberFromText();
}
if(operateValidFlag)
{
long t1;
double t2;
t1 = (long) resultNum;
t2 = resultNum - t1;
if(t2 == 0)
{
t.setText(String.valueOf(t1));
}
else
{
t.setText(String.valueOf(resultNum));
}
}
operator = key;
firstDigit = true;
operateValidFlag = true;
}
private double getNumberFromText()
{
double result = 0;
try
{
result = Double.valueOf(t.getText()).doubleValue();
}
catch(NumberFormatException e)
{}
return result;
}
public static void main(String args[])
{
calculator1 calculator = new calculator1();
calculator.setVisible(true);
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/228112.html
標籤:Java SE
上一篇:萌新求助
