package swing;
import java.awt.Container;
import java.awt.GridLayout;
/*GridLayout 類是一個布局處理器,它以矩形網格形式對容器的元件進行布置。容器被分成大小相等的矩形,一個矩形中放置一個元件*/
import java.awt.BorderLayout;
/*BorderLayout是一個布置容器的邊界布局,它可以對容器元件進行安排,并調整其大小,使其符合下列五個區域:南、北、東、西和中間區域。每個區域最多隻能包含一個元件,并通過相應的常量進行辨別:NORTH、SOUTH、EAST、WEST 和 CENTER。當使用邊界布局将一個元件添加到容器中時,要使用這五個常量之一*/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
*
* @author Administrator
*/
public class Cal extends JFrame implements ActionListener {
JFrame jf;
JTextField jtf;
String[] b = new String[] {"+","-","*","/","."};
JButton jis = new JButton("=");
private int temp = 0;
private float result = 0;
private float fnumber = 0, bnumber = 0;
public Cal(){
init();
}
public void init(){
jf = new JFrame();
jtf = new JTextField();
Container c = jf.getContentPane();//Returns the contentPane object for this frame.
jtf.setHorizontalAlignment(JTextField.RIGHT);//設定文本的水準對齊方式
jtf.setLayout(new GridLayout());
c.add(jtf,BorderLayout.NORTH);//
JPanel jp = new JPanel();
jp.setLayout(new GridLayout(4,4));//對于GridLayout(int rows,int cols)詳情請參見API
c.add(jp,BorderLayout.CENTER);/*這裡剛開始犯了一低級錯誤,将c寫成了jp,邏輯調用都出現了問題*/
JButton[] ja = new JButton[10];
JButton[] jb = new JButton[5];
for(int i = 0; i < 10; i++){
ja[i] = new JButton("" + i);
ja[i].addActionListener(this);
}
for(int j = 0; j < 5; j++){
jb[j] = new JButton("" + b[j]);
jb[j].addActionListener(this);
jp.add(ja[i]);
jp.add(jb[j]);
jp.add(jis);
jis.addActionListener(this);
jf.setSize(200,300);
jf.setVisible(true);
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
if(s.equals("+")){
this.fnumber = Float.parseFloat(this.jtf.getText());
this.jtf.setText("");
this.temp = 1;
else if(s.equals("-")){
this.temp = 2;
else if(s.equals("*")){
this.temp = 3;
else if(s.equals("/")){
this.temp = 4;
else if(s.equals(".")){
if(jtf.equals("")){
jtf.setText("0.");
}
else{
jtf.setText(jtf.getText() + ".");
else if(s.equals("=")){
this.bnumber = Integer.parseInt(this.jtf.getText());
switch(this.temp){
case 1:
result = fnumber + bnumber;
this.jtf.setText(String.valueOf(result));
break;
case 2:
result = fnumber - bnumber;
case 3:
result = fnumber * bnumber;
case 4:
result = fnumber / bnumber;
this.jtf.setText(String.valueOf(result));
break;
else{
jtf.setText(jtf.getText() + e.getActionCommand());
public static void main(String[] args){
new Cal();
}