import javaawt;
import javaawtevent;
class CalcAppDemo extends Frame{
private TextField t_result;
private Panel p_main;//主面板
private Panel p_num;//数字面板
private Panel p_oper;// *** 作符面板
private Panel p_show;//显示面板
private Button b_num[];//数字按钮
private Button b_oper[];// *** 作符按钮
public CalcAppDemo(String title){
setTitle(title);
t_result = new TextField("00",21);
p_main = new Panel();
p_num = new Panel();
p_oper = new Panel();
p_show = new Panel();
p_mainsetLayout(new BorderLayout());
p_numsetLayout(new GridLayout(4,3,1,1));
p_opersetLayout(new GridLayout(4,2,1,1));
b_num = new Button[12];
for(int i = 0;i < 9;i++){
b_num[i] = new Button(new Integer(i+1)toString());
}
b_num[9] = new Button("0");
b_num[10] = new Button("cls");
b_num[11] = new Button("");
for(int i = 0;i < 12;i++){
p_numadd(b_num[i]);
}
b_oper = new Button[8];
b_oper[0] = new Button("+");
b_oper[1] = new Button("-");
b_oper[2] = new Button("");
b_oper[3] = new Button("/");
b_oper[4] = new Button("pow");
b_oper[5] = new Button("sqrt");
b_oper[6] = new Button("+/-");
b_oper[7] = new Button("=");
for(int i = 0;i < 8;i++){
p_operadd(b_oper[i]);
}
t_resultsetEditable(false);
p_showadd(t_result,BorderLayoutNORTH); //文本框在显示面板的北边
p_mainadd(p_show,BorderLayoutNORTH); //显示面板在主面板上的北边
p_mainadd(p_num,BorderLayoutWEST);
p_mainadd(p_oper,BorderLayoutEAST); // *** 作符面板在主面板上的东边
thisadd(p_main,BorderLayoutCENTER); //主面板在框架(主窗口)的中间
setSize(400,400);
setResizable(false);
pack();
thisaddWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
Systemexit(0);
}
});
ButtonListener bl = new ButtonListener(); //监听器对象
for(int i=0;i<12;i++){
b_num[i]addActionListener(bl); //注册监听器
}
for(int i = 0;i < 8;i++){
b_oper[i]addActionListener(bl);
}
}
class ButtonListener implements ActionListener { //监听器类是内部类
private String lastOp; //存储上一次 *** 作符
private String strVal; //存储数字对应的字符串
private double total; //总数
private double number; //存储新输入的数
private boolean firsttime;//判断是否第一次按下的是 *** 作符按钮
private boolean operatorPressed;//判断是否已经按过 *** 作符按钮
ButtonListener( ){
firsttime = true;
strVal = "";
}
//事件处理器
public void actionPerformed( ActionEvent e ){
String s = ((Button)egetSource())getLabel()trim();
if(CharacterisDigit(scharAt(0))){ //判断是 *** 作数还是 *** 作符
handleNumber(s);
}else{
calculate(s); //计算
}
}
//判断是一元 *** 作符还是二元 *** 作符,并根据 *** 作符类型做计算
void calculate( String op ){
operatorPressed = true;
if(firsttime&&!isUnary(op)){
total = getNumberOnDisplay();
firsttime = false;
}
if (isUnary(op)){
handleUnaryOp(op);
}
else if (lastOp != null){
handleBinaryOp(lastOp);
}
if (!isUnary(op)){ //存储上一次按下的 *** 作符
lastOp = op;
}
}
//判断是否是一元 *** 作符
boolean isUnary(String s){
return sequals( "=" )
|| sequals( "cls" )
|| sequals( "sqrt" )
|| sequals( "+/-" )
|| sequals( "" );
}
//处理一元 *** 作符
void handleUnaryOp( String op ){
if ( opequals( "+/-" ) ){
//将显示框中的数字取反
number = negate(getNumberOnDisplay()+"");
t_resultsetText("");
t_resultsetText( number + "");
return;
}else if (opequals("")){
handleDecPoint();
return;
}else if(opequals("sqrt")){
number = Mathsqrt(getNumberOnDisplay());
t_resultsetText("");
t_resultsetText(number+"");
return;
}else if(opequals("=")){
//在按下"="前已经按下一个二元运算符
if(lastOp!=null&&!isUnary(lastOp)){
handleBinaryOp(lastOp);
}
lastOp=null;
firsttime=true;
return;
}else{
clear();
}
}
//处理二元运算符
void handleBinaryOp(String op){
if(opequals("+")){
total += number;
}else if(opequals("-")){
total -= number;
}else if(opequals("")){
total = number;
}else if(opequals("/")){
try{ //异常处理
total /=number;
}catch(ArithmeticException ae){ }
}else if(opequals("pow"))
total=Mathpow(total,number);
// t_resultsetText("");
lastOp = null;
// strVal = "";
number = 0;
t_resultsetText(total+"");
}
//该方法用于处理数字按钮
void handleNumber(String s){
if (!operatorPressed){ //连接按下的数字按钮的值
strVal+=s;
}
else{ //当按下 *** 作符按钮时,清除strVal并存储输入的第一个数值
operatorPressed = false;
strVal = s;
}
//将strVal转换为double
number=new Double(strVal)doubleValue();
t_resultsetText("");
t_resultsetText(strVal);
}
//该方法用于按下""按钮
void handleDecPoint(){
operatorPressed = false;
//如果该字符串中无"",放置一个""在字符串末尾
if ( strValindexOf( "" ) < 0 ) {
strVal+="";
}
t_resultsetText("");
t_resultsetText( strVal );
}
//该方法用于将一个数求反
double negate( String s ){
operatorPressed = false;
//如果是一个整数,去掉小数点后面的0
if ( number == ( int ) number ){
s = ssubstring(0, sindexOf( "" ) );
}
//如果无"-"增加在该数的前面
if ( sindexOf( "-" ) < 0 ){
strVal = "-"+s;
}
else{//如果有"-"则去掉
strVal = ssubstring( 1 );
}
return new Double( strVal )doubleValue();
}
//将显示框中的值转换为Double
double getNumberOnDisplay() {
return new Double(t_resultgetText())doubleValue();
}
//清除屏幕并设置所有的标识
void clear(){
firsttime = true;
lastOp = null;
strVal = "";
total = 0;
number = 0;
t_resultsetText("0");
}
}
public static void main(String args[]){
CalcAppDemo c = new CalcAppDemo("简单的计算器程序");
csetVisible(true);
}
}
//这是我以前写的,参考一下吧
以上就是关于求一个java编辑的计算器小程序,最好带详细讲解的,瞎转的就算了。感激不尽全部的内容,包括:求一个java编辑的计算器小程序,最好带详细讲解的,瞎转的就算了。感激不尽、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)