📄 calculatergui.java
字号:
package zzjun.gui.service;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import zzjun.gui.domain.CalData;
public class CalculaterGUI extends JFrame implements ActionListener {
private JPanel textPanel;
private JPanel keyPanel;
private JPanel mPanel;
private JPanel cPanel;
private JTextField textField;
private JTextField mTextField;
private String[] keyNames = { "7", "8", "9", "/","sqrt", "4", "5", "6", "*","%", "1",
"2", "3", "-","1/x", "0", "+/-",".", "+", "=" };
private String[] cNames = { "Bankspace", "CE", "C" };
private String[] mNames={"MC","MR","MS","M+"};
private JButton keyButtons[] = new JButton[20];
private JButton cButtons[] = new JButton[3];
private JButton mButtons[] = new JButton[4];
int flag = 0; // 状态标志位 判断是否重起一行
public CalculaterGUI(String title) {
super(title);
setLayout(new BorderLayout(15,15));
textField = new JTextField();
mTextField=new JTextField();
mTextField.setEditable(false);
textField.setHorizontalAlignment(textField.RIGHT);
textField.setText("0");
textPanel = new JPanel();
textPanel.setLayout(new BorderLayout());
textPanel.add(textField,BorderLayout.CENTER);
keyPanel = new JPanel();
keyPanel.setLayout(new GridLayout(4, 5, 5, 8));
for (int i = 0; i < keyButtons.length; i++) {
keyButtons[i] = new JButton(keyNames[i]);
keyButtons[i].setForeground(Color.blue);
keyButtons[i].addActionListener(this);
keyPanel.add(keyButtons[i]);
}
keyButtons[3].setForeground(Color.red);
keyButtons[8].setForeground(Color.red);
keyButtons[13].setForeground(Color.red);
keyButtons[18].setForeground(Color.red);
keyButtons[19].setForeground(Color.red);
cPanel=new JPanel();
cPanel.setLayout(new GridLayout(1,3,3,3));
for (int i = 0; i < cButtons.length; i++) {
cButtons[i] = new JButton(cNames[i]);
cButtons[i].setForeground(Color.red);
cButtons[i].addActionListener(this);
cPanel.add(cButtons[i]);
}
mPanel=new JPanel();
mPanel.setLayout(new GridLayout(4,1,3,3));
for(int i=0; i<mButtons.length; i++){
mButtons[i]=new JButton(mNames[i]);
mButtons[i].setForeground(Color.red);
mButtons[i].addActionListener(this);
mPanel.add(mButtons[i]);
}
JPanel center=new JPanel();
center.setLayout(new BorderLayout(15,12));
center.add(cPanel, BorderLayout.NORTH);
center.add(keyPanel, BorderLayout.CENTER);
JPanel left=new JPanel();
left.setLayout(new BorderLayout(10,8));
left.add(mTextField,BorderLayout.NORTH);
left.add(mPanel, BorderLayout.CENTER);
add(textPanel,BorderLayout.NORTH);
add(left,BorderLayout.WEST);
add(center,BorderLayout.CENTER);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
System.exit(0);
}
});
pack();
setResizable(false); // 屏蔽最大化
setVisible(true);
}
CalData calData = new CalData();
ICalculater IC = new CalculaterImpl();
String sign = null;
StringBuffer sb=new StringBuffer();
@Override
public void actionPerformed(ActionEvent event) {
JButton button = (JButton) event.getSource();
if (textField.getText().equals("0") && ".*/+-=0123456789".indexOf(button.getText()) != -1) {
if (".*/+-=".indexOf(button.getText()) == -1) {
textField.setText(button.getText());
sb.append(button.getText());
} else {
if ("+-*/".indexOf(button.getText()) != -1) {
calData.setNum1(0d);
sb.append("0"+button.getText());
sign = button.getText();
} else if(button.getText().equals(".")){
textField.setText(textField.getText() + button.getText());
sb.append(textField.getText());
}
}
} else {
if ("-+*/".indexOf(button.getText()) != -1) { //输入+-*/
if(sign==null||(sb.charAt(sb.length()-1)=='+'||sb.charAt(sb.length()-1)=='-'||sb.charAt(sb.length()-1)=='*'||sb.charAt(sb.length()-1)=='/')){
calData.setNum1(Double.parseDouble(textField.getText()));
sign = button.getText();
sb.delete(0, sb.length());
sb.append(textField.getText()+button.getText());
flag = 1;
}else{
calData.setNum2(Double.parseDouble(textField.getText()));
if (sign.equals("+")) IC.add(calData);
if (sign.equals("-")) IC.sub(calData);
if (sign.equals("*")) IC.multiply(calData);
if (sign.equals("/")) IC.divide(calData);
textField.setText(String.valueOf(calData.getResult()));
sign = button.getText();
flag = 1;
calData.setNum1(Double.parseDouble(textField.getText()));
sb.delete(0, sb.length());
sb.append(textField.getText()+button.getText());
}
}
if (".0123456789".indexOf(button.getText()) != -1) { // 输入是数字或者小数点
if (flag == 1) {
textField.setText(button.getText());
sb.append(button.getText());
flag = 0;
} else {
try {
Double.parseDouble(textField.getText()+ button.getText()); // 判断是否可以转换为一个double
textField.setText(textField.getText()+ button.getText());
sb.append(button.getText());
} catch (Exception e) {
System.out.println("非法数字!");
}
}
}
}
if (button.getText().equals("=")&&sign!=null) {
flag=1;
calData.setNum2(Double.parseDouble(textField.getText()));
if (sign.equals("+")) IC.add(calData);
if (sign.equals("-")) IC.sub(calData);
if (sign.equals("*")) IC.multiply(calData);
if (sign.equals("/")) IC.divide(calData);
sb.delete(0, sb.length());
sign=null;
textField.setText(String.valueOf(calData.getResult()));
}
if (button.getText().equals("C")) {
textField.setText("0");
calData.setNum1(0d);
calData.setNum2(0d);
sign = null;
sb.delete(0, sb.length());
sb.append("0");
flag = 0;
}
if(button.getText().equals("CE")){
textField.setText("0");
}
if(button.getText().equals("+/-")){
if(!textField.getText().isEmpty()){
textField.setText(String.valueOf(-1*Double.parseDouble(textField.getText())));
}
}
if(button.getText().equals("sqrt")){
if(!textField.getText().isEmpty()){
calData.setNum1(Double.parseDouble(textField.getText()));
IC.sqrt(calData);
textField.setText(String.valueOf(calData.getResult()));
flag = 1;
}
}
if(button.getText().equals("1/x")){
if(!textField.getText().isEmpty()){
calData.setNum1(Double.parseDouble(textField.getText()));
IC.oneDivideX(calData);
textField.setText(String.valueOf(calData.getResult()));
flag = 1;
}
}
if (button.getText().equals("Bankspace")){
if(!textField.getText().isEmpty()){
textField.setText(textField.getText().substring(0,textField.getText().length()-1));
sb.deleteCharAt(sb.length()-1);
}
}
// System.out.println("====="+sb.toString());
if(textField.getText().equals("Infinity")||textField.getText().equals("-Infinity")){
textField.setText("除数不能为0!");
}
if(textField.getText().equals("NaN")){
textField.setText("函数输入无效。");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -