import java.awt.Container; |
import java.awt.GridLayout; |
import java.awt.BorderLayout; |
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; |
/** |
* Java计算器 Calculater |
*/ |
public class Calculater 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 Calculater() { |
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 ); |
} |
for ( int i = 0 ; i < 10 ; i++) { |
jp.add(ja[i]); |
} |
for ( int j = 0 ; j < 5 ; j++) { |
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 .fnumber = Float.parseFloat( this .jtf.getText()); |
this .jtf.setText( "" ); |
this .temp = 2 ; |
} else if (s.equals( "*" )) { |
this .fnumber = Float.parseFloat( this .jtf.getText()); |
this .jtf.setText( "" ); |
this .temp = 3 ; |
} else if (s.equals( "/" )) { |
this .fnumber = Float.parseFloat( this .jtf.getText()); |
this .jtf.setText( "" ); |
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; |
this .jtf.setText(String.valueOf(result)); |
break ; |
case 3 : |
result = fnumber * bnumber; |
this .jtf.setText(String.valueOf(result)); |
break ; |
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 Calculater(); |
} |
} |