日期:2014-05-20  浏览次数:20684 次

自学的JAVA,第一次写窗口程序,简单的整数计算器的程序。
心里没底,虽然能用,但是不知道写的怎么样,自己胡弄的,希望各位前辈能给点建议。
第一次写出来窗口话的程序。。。
非常感谢各位前辈提意见。


package 窗口化;
import java.awt.*;
import javax.swing.*;
public class 计算器 {
public static void main(String[] args) {
numberButton frame=new numberButton();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(310,285);
frame.setLocationRelativeTo(null);
frame.setTitle("计算器");
frame.setVisible(true);
}

}




package 窗口化;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
public class numberButton extends JFrame{
int count=0;
int a=0;
int b=0;
char cr=0;
JButton[] jbt=new JButton[10];
JTextField jtf=new JTextField(14);
public numberButton(){
JPanel p1=new JPanel(new GridLayout(4,4,4,4));
jbt[0]=new JButton("0");
JButton jbtPoint=new JButton(".");
JButton jbtEqualitySign=new JButton("=");
JButton jbtPlusSign=new JButton("+");
JButton jbtMinusSign=new JButton("-");
JButton jbtTimesSign=new JButton("*");
JButton jbtDivisionSign=new JButton("/");
JButton jbtClear=new JButton("C");
jbt[0].setFont(new java.awt.Font("微软雅黑", 0, 20));
jbtPoint.setFont(new java.awt.Font("微软雅黑", 0, 20));
jbtEqualitySign.setFont(new java.awt.Font("微软雅黑", 0, 20));
jbtPlusSign.setFont(new java.awt.Font("微软雅黑", 0, 20));
jbtMinusSign.setFont(new java.awt.Font("微软雅黑", 0, 20));
jbtTimesSign.setFont(new java.awt.Font("微软雅黑", 0, 20));
jbtDivisionSign.setFont(new java.awt.Font("微软雅黑", 0, 20));
jbtClear.setFont(new java.awt.Font("微软雅黑", 0, 20));
for(int i=7;i>=1;i=i-3){
for(int j=i;j<i+3;j++){
jbt[j]=new JButton(""+j);   //JButton的数组,0~9分别对应的jbt[0]~jbt[9]
p1.add(jbt[j]);
jbt[j].setFont(new java.awt.Font("微软雅黑", 0, 20));
}
}
jtf.setFont(new java.awt.Font("微软雅黑", 0, 20));
p1.add(jbt[0]);
p1.add(jbtPoint);
p1.add(jbtEqualitySign);
JPanel p2=new JPanel(new GridLayout(2,2,4,4));
p2.add(jbtPlusSign);
p2.add(jbtMinusSign);
p2.add(jbtTimesSign);
p2.add(jbtDivisionSign);
JPanel p3=new JPanel(new GridLayout(2,2,4,4));
p3.add(p2,BorderLayout.CENTER);
p3.add(jbtClear,BorderLayout.SOUTH);
JPanel p4=new JPanel(new FlowLayout(FlowLayout.LEFT,7,7)); 
p4.add(p1);
p4.add(p3);
JPanel p5=new JPanel(new FlowLayout(FlowLayout.LEFT,7,7));
p5.add(jtf);
p5.add(p4);
add(p5);
jbt[0].addActionListener(new JbtnumListener(0));
jbt[1].addActionListener(new JbtnumListener(1));
jbt[2].addActionListener(new JbtnumListener(2));
jbt[3].addActionListener(new JbtnumListener(3));
jbt[4].addActionListener(new JbtnumListener(4));
jbt[5].addActionListener(new JbtnumListener(5));
jbt[6].addActionListener(new JbtnumListener(6));
jbt[7].addActionListener(new JbtnumListener(7));
jbt[8].addActionListener(new JbtnumListener(8));
jbt[9].addActionListener(new JbtnumListener(9));
jbtPlusSign.addActionListener(new JbtSignListener('+'));
jbtMinusSign.addActionListener(new JbtSignListener('-'));
jbtTimesSign.addActionListener(new JbtSignListener('*'));
jbtDivisionSign.addActionListener(new JbtSignListener('/'));
jbtClear.addActionListener(new JbtClearListener());
jbtEqualitySign.addActionListener(new JbtESListener());
}
class JbtnumListener implements ActionListener{
int num;
JbtnumListener(int num){
this.num=num;
}
public void actionPerformed(ActionEvent e){

if(cr==0){
a=a*10+num;
jtf.setText(""+a);
}
else{
b=b*10+num;
jtf.setText(""+b);
}
count++;
}
}
class JbtSignListener implements ActionListener{
char cr0;
JbtSignListener(char cr0){
this.cr0=cr0;
}
public void actionPerformed(ActionEvent e){
cr=cr0;
jtf.setText(""+cr);
count=0;
b=0;
}
}
class JbtESListener implements ActionListener{
public void actionPerformed(ActionEvent e){
switch(cr){
case '+':a=a+b;break;
case '-':a=a-b;break;
case '*':a=a*b;break;
case '/':a=a/b;break;
}
jtf.setText(String.format("%d", a));
}
}
class JbtClearListener implements ActionListener{
public void actionPerformed(ActionEvent e){
jtf.setText("");
cr=0;
a=0;
b=0;
count=0;
}
}
}

------解决方案--------------------
不要用中文做包名和类名。。。。。。。。。。。。。。。。。。。
------解决方案--------------------
纯界面,计算器的算法实现无意义。放弃Swing吧,阿弥陀佛
------解决方案--------------------
引用: