【实验要求】编写一个模拟计算器的程序,使用面板和网格布局,添加一个文本框,10个数字按钮(0-9),4个加减乘除按钮,一个等号按钮,一个清除按钮,要求将计算公式和结果显示在文本框中。
【实验代码】package Calculator;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class CalculatorInterface extends JFrame {
String buttonStr1 = "";
String buttonStr2 = "";
String buttonchar = "";
JTextField textField;
public CalculatorInterface(){
super();
setTitle("计算器HY49");
setResizable(false);
setBounds(100,100,240,240);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel viewPanel = new JPanel();
getContentPane().add(viewPanel,BorderLayout.NORTH);
textField = new JTextField();
textField.setEditable(false);
textField.setHorizontalAlignment(SwingConstants.RIGHT);
textField.setColumns(18);
viewPanel.add(textField);
final JPanel buttonPanel = new JPanel();
final GridLayout gridLayout = new GridLayout(4,4);
gridLayout.setVgap(10);
gridLayout.setHgap(10);
buttonPanel.setLayout(gridLayout);
getContentPane().add(buttonPanel,BorderLayout.CENTER);
String [][]names = {{"1","2","3","+"},{"4","5","6","-"},{"7","8","9","*"},{"cl","0","=","/"}};
JButton [][]buttons = new JButton[4][4];
for (int row = 0;row <4;row++){
for (int col = 0;col<4;col++){
buttons[row][col] = new JButton(names[row][col]);
//建立一个监听机制类ClickedButton
buttons[row][col].addActionListener(new ClickedButton());
buttonPanel.add(buttons[row][col]);
}
}
final JLabel leftLabel =new JLabel();
final JLabel rightLabel =new JLabel();
leftLabel.setPreferredSize(new Dimension(10,0));
getContentPane().add(leftLabel,BorderLayout.WEST);
rightLabel.setPreferredSize(new Dimension(10,0));
getContentPane().add(rightLabel,BorderLayout.EAST);
}
class ClickedButton implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JButton whichButton = (JButton) e.getSource();//获取点击的事件,即是点下了哪个按钮
String whichName = whichButton.getActionCommand();
if (!(whichName.equals("+")||whichName.equals("-")||whichName.equals("*")||whichName.equals("/")||whichName.equals("cl")||whichName.equals("="))&&buttonchar==""){
buttonStr1+=whichName;
textField.setText(buttonStr1);
}
else if (!(whichName.equals("+")||whichName.equals("-")||whichName.equals("*")||whichName.equals("/")||whichName.equals("cl")||whichName.equals("="))&&buttonchar!=""){
buttonStr2+=whichName;
textField.setText(buttonStr1+" "+buttonchar+" "+buttonStr2);
}
else{
if (whichName.equals("cl")){
if (buttonStr2==""){
buttonStr1 = buttonStr1.substring(0, buttonStr1.length()-1);
textField.setText(buttonStr1);
}
else{
buttonStr2 = buttonStr2.substring(0, buttonStr2.length()-1);
textField.setText(buttonStr1+" "+buttonchar+" "+buttonStr2);
}
}
else if (whichName.equals("=")){
textField.setText(buttonStr1+" "+buttonchar+" "+buttonStr2+" "+"=");
int first = Integer.parseInt(buttonStr1);
int second = Integer.parseInt(buttonStr2);
double result;
if (buttonchar=="+")
result = first + second;
else if (buttonchar=="-")
result = first - second;
else if (buttonchar=="*")
result = first * second;
else
result = first / second;
textField.setText(buttonStr1+" "+buttonchar+" "+buttonStr2+" "+" = "+result);
}
else
buttonchar = whichName;
}
}
}
public static void main(String []args){
CalculatorInterface cal = new CalculatorInterface();
cal.setVisible(true);
}
}
【实验效果】
图1.实现加法