每一个可以努力的日子,都是一份厚礼。
Java Applet图形界面计算器
2008-11-26 23:35
直接上源码:
//
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Calculator extends java.applet.Applet implements ActionListener
{
//界面组件
private Button m_btnNum[]=new Button[10];
private Button m_btnAdd=new Button("+");
private Button m_btnSub=new Button("-");
private Button m_btnMul=new Button("*");
private Button m_btnDiv=new Button("/");
private Button m_btnEqu=new Button("=");
private Button m_btnClr=new Button("clr");
private TextField m_textDisplay=new TextField(20);
private String m_strInfo=new String();
private int i;
//界面布局,加入事件监听器
public void init()
{
setName("计算器");
for(i=0;i<=9;i++)
{
m_btnNum[i]=new Button(/*"%d",i*/Integer.toString(i));
}
setLayout(new BorderLayout());
add("North",m_textDisplay);
m_textDisplay.setEditable(false);
Panel panelBody=new Panel();
panelBody.setLayout(new GridLayout(4,4));
for(i=1;i<=9;i++)
{
panelBody.add(m_btnNum[i]);
m_btnNum[i].addActionListener(this);
}
panelBody.add(m_btnNum[0]);m_btnNum[0].addActionListener(this);
panelBody.add(m_btnClr);m_btnClr.addActionListener(this);
panelBody.add(m_btnEqu);m_btnEqu.addActionListener(this);
panelBody.add(m_btnAdd);m_btnAdd.addActionListener(this);
panelBody.add(m_btnSub);m_btnSub.addActionListener(this);
panelBody.add(m_btnMul);m_btnMul.addActionListener(this);
panelBody.add(m_btnDiv);m_btnDiv.addActionListener(this);
add("Center",panelBody);
setSize(200,200);
}
public void start()
{
}
//将按钮的信息传到显示面板,响应按钮命令
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==m_btnClr)
m_strInfo="";
else if(e.getSource()==m_btnAdd)
m_strInfo+="+";
else if(e.getSource()==m_btnSub)
m_strInfo+="-";
else if(e.getSource()==m_btnMul)
m_strInfo+="*";
else if(e.getSource()==m_btnDiv)
m_strInfo+="/";
else if(e.getSource()==m_btnEqu)
{
HandleEqu();
return;
}
else
{
String strTemp=e.getSource().toString();
int nLen=strTemp.lastIndexOf("=");
m_strInfo+=strTemp.charAt(nLen+1);
}
m_textDisplay.setText(m_strInfo);
}
//按下等号后的处理事件
public void HandleEqu()
{
try
{
String strTemp;
strTemp=ToTailString(m_strInfo);
strTemp=CalTailString(strTemp);
m_strInfo+="=";
m_strInfo+=strTemp;
m_textDisplay.setText(m_strInfo);
m_strInfo="";
}
catch(Exception e)
{
m_strInfo="";
System.out.println(e.toString());
m_textDisplay.setText("ERROR");
}
}
//转化为后缀表达式
private String ToTailString (String strOrignal)throws Exception
{
int top=-1;
char []Exp=new char[200];
char []St=new char[200];
char ch;
int i=0,t=0;
boolean bFlag=true;
int nLen=strOrignal.length();
if(nLen==0)
return "";
ch=strOrignal.charAt(i);
i++;
while(i<=nLen&&bFlag)
{
switch(ch)
{
case '+':
case '-':
while(top!=-1)
{
Exp[t]=St[top];
top--;
t++;
}
top++;
St[top]=ch;
break;
case '*':
case '/':
while(top!=-1 && (St[top]=='*' || St[top]=='/') )
{
Exp[t]=St[top];
top--;
t++;
}
top++;
St[top]=ch;
break;
default:
while(ch>='0' && ch<='9')
{
Exp[t]=ch;
t++;
if(i>=nLen){bFlag=false;break;}
ch=strOrignal.charAt(i);
i++;
}
i--;
Exp[t]='#';
t++;
}
ch=strOrignal.charAt(i);
i++;
if(i>nLen){bFlag=false;break;}
}
while(top!=-1)
{
Exp[t]=St顶端;
t++;
top--;
}
String str1="";
for(int k=0;k='0' && ch<='9')
{
d=10*d+(int)(ch-'0');
if(t>=nLen){bFlag=false;break;}
ch=strTail.charAt(t);
t++;
}
top++;
St顶端=d;
break;
}
if(t>=nLen)
{
bFlag=false;
break;
}
ch=strTail.charAt(t);
t++;
}
return Float.toString(St[0]);
}
}
Ubuntu8.04 + Sun JAVA6环境
编译:
javac Calculator.java
运行结果:
appletviewer Calculator.java

感言:
Java图形界面只能用纯代码来写,比较痛苦。另外本程序计算后缀表达式的算法在《数据结构》课程中已经练习过,虽然我还是不太熟。。。
| 这篇文章由lovelucy于2008-11-26 23:35发表在编程。你可以订阅RSS 2.0 也可以发表评论或引用到你的网站。除特殊说明外文章均为本人原创,并遵从署名-非商业性使用-相同方式共享创作协议,转载或使用请注明作者和来源,尊重知识分享。 |

批评不自由
则赞美无意义