package comelectricautoworkcontroller;
import javaawtBorderLayout;
import javaawtColor;
import javaawtGridLayout;
import javaawteventActionEvent;
import javaawteventActionListener;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingJPanel;
import javaxswingJTextField;
/
一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。 但还不支持键盘 *** 作。
/
public class jisuanqi extends JFrame implements ActionListener {
/ 计算器上的键的显示名字 /
private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",
"", "%", "1", "2", "3", "-", "1/x", "0", "+/-", "", "+", "=" };
/ 计算器上的功能键的显示名字 /
private final String[] COMMAND = { "Backspace", "CE", "C" };
/ 计算器左边的M的显示名字 /
private final String[] M = { " ", "MC", "MR", "MS", "M+" };
/ 计算器上键的按钮 /
private JButton keys[] = new JButton[KEYSlength];
/ 计算器上的功能键的按钮 /
private JButton commands[] = new JButton[COMMANDlength];
/ 计算器左边的M的按钮 /
private JButton m[] = new JButton[Mlength];
/ 计算结果文本框 /
private JTextField resultText = new JTextField("0");
// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private boolean firstDigit = true;
// 计算的中间结果。
private double resultNum = 00;
// 当前运算的运算符
private String operator = "=";
// *** 作是否合法
private boolean operateValidFlag = true;
/
构造函数
/
public jisuanqi() {
super();
// 初始化计算器
init();
// 设置计算器的背景颜色
thissetBackground(ColorLIGHT_GRAY);
thissetTitle("计算器");
// 在屏幕(500, 300)坐标处显示计算器
thissetLocation(500, 300);
// 不许修改计算器的大小
thissetResizable(false);
// 使计算器中各组件大小合适
thispack();
}
/
初始化计算器
/
private void init() {
// 文本框中的内容采用右对齐方式
resultTextsetHorizontalAlignment(JTextFieldRIGHT);
// 不允许修改结果文本框
resultTextsetEditable(false);
// 设置文本框背景颜色为白色
resultTextsetBackground(Colorwhite);
// 初始化计算器上键的按钮,将键放在一个画板内
JPanel calckeysPanel = new JPanel();
// 用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calckeysPanelsetLayout(new GridLayout(4, 5, 3, 3));
for (int i = 0; i < KEYSlength; i++) {
keys[i] = new JButton(KEYS[i]);
calckeysPaneladd(keys[i]);
keys[i]setForeground(Colorblue);
}
// 运算符键用红色标示,其他键用蓝色表示
keys[3]setForeground(Colorred);
keys[8]setForeground(Colorred);
keys[13]setForeground(Colorred);
keys[18]setForeground(Colorred);
keys[19]setForeground(Colorred);
// 初始化功能键,都用红色标示。将功能键放在一个画板内
JPanel commandsPanel = new JPanel();
// 用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
commandsPanelsetLayout(new GridLayout(1, 3, 3, 3));
for (int i = 0; i < COMMANDlength; i++) {
commands[i] = new JButton(COMMAND[i]);
commandsPaneladd(commands[i]);
commands[i]setForeground(Colorred);
}
// 初始化M键,用红色标示,将M键放在一个画板内
JPanel calmsPanel = new JPanel();
// 用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calmsPanelsetLayout(new GridLayout(5, 1, 3, 3));
for (int i = 0; i < Mlength; i++) {
m[i] = new JButton(M[i]);
calmsPaneladd(m[i]);
m[i]setForeground(Colorred);
}
// 下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部,
// 将文本框放在北部,将calms画板放在计算器的西部。
// 新建一个大的画板,将上面建立的command和calckeys画板放在该画板内
JPanel panel1 = new JPanel();
// 画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素
panel1setLayout(new BorderLayout(3, 3));
panel1add("North", commandsPanel);
panel1add("West", calckeysPanel);
// 建立一个画板放文本框
JPanel top = new JPanel();
topsetLayout(new BorderLayout());
topadd("Center", resultText);
// 整体布局
getContentPane()setLayout(new BorderLayout(3, 5));
getContentPane()add("North", top);
getContentPane()add("Center", panel1);
getContentPane()add("West", calmsPanel);
// 为各按钮添加事件侦听器
// 都使用同一个事件侦听器,即本对象。本类的声明中有implements ActionListener
for (int i = 0; i < KEYSlength; i++) {
keys[i]addActionListener(this);
}
for (int i = 0; i < COMMANDlength; i++) {
commands[i]addActionListener(this);
}
for (int i = 0; i < Mlength; i++) {
m[i]addActionListener(this);
}
}
/
处理事件
/
public void actionPerformed(ActionEvent e) {
// 获取事件源的标签
String label = egetActionCommand();
if (labelequals(COMMAND[0])) {
// 用户按了"Backspace"键
handleBackspace();
} else if (labelequals(COMMAND[1])) {
// 用户按了"CE"键
resultTextsetText("0");
} else if (labelequals(COMMAND[2])) {
// 用户按了"C"键
handleC();
} else if ("0123456789"indexOf(label) >= 0) {
// 用户按了数字键或者小数点键
handleNumber(label);
// handlezero(zero);
} else {
// 用户按了运算符键
handleOperator(label);
}
}
/
处理Backspace键被按下的事件
/
private void handleBackspace() {
String text = resultTextgetText();
int i = textlength();
if (i > 0) {
// 退格,将文本最后一个字符去掉
text = textsubstring(0, i - 1);
if (textlength() == 0) {
// 如果文本没有了内容,则初始化计算器的各种值
resultTextsetText("0");
firstDigit = true;
operator = "=";
} else {
// 显示新的文本
resultTextsetText(text);
}
}
}
/
处理数字键被按下的事件
@param key
/
private void handleNumber(String key) {
if (firstDigit) {
// 输入的第一个数字
resultTextsetText(key);
} else if ((keyequals("")) && (resultTextgetText()indexOf("") < 0)) {
// 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
resultTextsetText(resultTextgetText() + "");
} else if (!keyequals("")) {
// 如果输入的不是小数点,则将数字附在结果文本框的后面
resultTextsetText(resultTextgetText() + key);
}
// 以后输入的肯定不是第一个数字了
firstDigit = false;
}
/
处理C键被按下的事件
/
private void handleC() {
// 初始化计算器的各种值
resultTextsetText("0");
firstDigit = true;
operator = "=";
}
/
处理运算符键被按下的事件
@param key
/
private void handleOperator(String key) {
if (operatorequals("/")) {
// 除法运算
// 如果当前结果文本框中的值等于0
if (getNumberFromText() == 00) {
// *** 作不合法
operateValidFlag = false;
resultTextsetText("除数不能为零");
} else {
resultNum /= getNumberFromText();
}
} else if (operatorequals("1/x")) {
// 倒数运算
if (resultNum == 00) {
// *** 作不合法
operateValidFlag = false;
resultTextsetText("零没有倒数");
} else {
resultNum = 1 / resultNum;
}
} else if (operatorequals("+")) {
// 加法运算
resultNum += getNumberFromText();
} else if (operatorequals("-")) {
// 减法运算
resultNum -= getNumberFromText();
} else if (operatorequals("")) {
// 乘法运算
resultNum = getNumberFromText();
} else if (operatorequals("sqrt")) {
// 平方根运算
resultNum = Mathsqrt(resultNum);
} else if (operatorequals("%")) {
// 百分号运算,除以100
resultNum = resultNum / 100;
} else if (operatorequals("+/-")) {
// 正数负数运算
resultNum = resultNum (-1);
} else if (operatorequals("=")) {
// 赋值运算
resultNum = getNumberFromText();
}
if (operateValidFlag) {
// 双精度浮点数的运算
long t1;
double t2;
t1 = (long) resultNum;
t2 = resultNum - t1;
if (t2 == 0) {
resultTextsetText(StringvalueOf(t1));
} else {
resultTextsetText(StringvalueOf(resultNum));
}
}
// 运算符等于用户按的按钮
operator = key;
firstDigit = true;//这个地方太tm巧妙了想好几天, 先进行上一次 *** 作,再将本次 *** 作(最后一次 *** 作)赋给 *** 作,所以每次 *** 作前都先进行上一次 *** 作,默认 *** 作为"=" 挺nb
operateValidFlag = true;
}
/
从结果文本框中获取数字
@return
/
private double getNumberFromText() {
double result = 0;
try {
result = DoublevalueOf(resultTextgetText())doubleValue(); //显示文字后不会蹦出
} catch (NumberFormatException e) {
}
return result;
}
public static void main(String args[]) {
jisuanqi calculator1 = new jisuanqi();
calculator1setVisible(true);
calculator1setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
}
}
========================================================
代码比较多,放在任何一个项目里都行,新建一个叫做 jisuanqi 的java文件,粘贴进去就行,会有一个错误是包位置的选择,点击错误选择正确的包位置就可以了, 无错误后执行文件最下面的main函数,就会出现计算器。有不懂的可以继续问,望采纳~!
给个你参考:
import javaawt;
import javaawtevent;
import javautilCalendar;
import javautilDate;
import javaxswing;
public class MyCalculator implements Runnable, ActionListener
{
JFrame f;
JMenu mEdit;
JMenu mView;
JMenuItem mCopy;
JMenuItem mPaste;
JTextField tResult;
JTextField text;
JButton bNumber;
JButton bOperator;
JButton bOther;
JButton bM;
JTextField time,date1;
Thread datimeThread;
JPanel pstatusbar;
JLabel labwelcome;
boolean isDouble=false;//是否为实数
int opFlag=-1;
static double t1=0,t2=0,t3=0,result=0;
static int opflag1=-1,opflag2=-1,flag=0,resflag=1;
int preOp,currentOp=0;//标准位
double op1=0,op2=0;// *** 作数
double n3;
StringBuffer buf=new StringBuffer(20);
StringBuffer copyBoard=new StringBuffer(20);//剪贴板
StringBuffer memory = new StringBuffer(20);//M系列
StringBuffer str = new StringBuffer();
public MyCalculator()
{
f = new JFrame("新世纪计算器");
Container contentPane = fgetContentPane();
/菜单的创建开始/
JMenuBar mBar = new JMenuBar();
mBarsetOpaque(true);
mEdit = new JMenu("编辑(E)");
mEditsetMnemonic(KeyEventVK_E);
mCopy = new JMenuItem("复制(C)");
mEditadd(mCopy);
mPaste = new JMenuItem("粘贴(P)");
mEditadd(mPaste);
mView = new JMenu("查看(V)");
mViewsetMnemonic(KeyEventVK_V);
mViewadd(new JMenuItem("标准型"));
mViewadd(new JMenuItem("科学型"));
mViewaddSeparator();
mViewadd(new JMenuItem("查看分组"));
mBaradd(mEdit);
mBaradd(mView);
fsetJMenuBar(mBar);
contentPanesetLayout(new BorderLayout());
JPanel pTop = new JPanel();
tResult = new JTextField("0",26);
tResultsetHorizontalAlignment(JTextFieldRIGHT );
tResultsetEditable(false);
pTopadd(tResult);
text = new JTextField();
textsetHorizontalAlignment(JTextFieldLEFT );
contentPaneadd(pTop,BorderLayoutNORTH);
JPanel pBottom = new JPanel();
pBottomsetLayout(new BorderLayout());
JPanel pLeft = new JPanel();
pLeftsetLayout(new GridLayout(5,1,3,3));
bM = new JButton(" ");
bMsetEnabled(false);
pLeftadd(bM);
bOther = new JButton("MC");
bOtheraddActionListener(this);
bOthersetForeground(Colorblue);
bOthersetMargin(new Insets(3,2,3,2));
pLeftadd(bOther);
bOther = new JButton("MR");
bOtheraddActionListener(this);
bOthersetForeground(Colorblue);
bOthersetMargin(new Insets(3,2,3,2));
pLeftadd(bOther);
bOther = new JButton("MS");
bOtheraddActionListener(this);
bOthersetForeground(Colorblue);
bOthersetMargin(new Insets(3,2,3,2));
pLeftadd(bOther);
bOther = new JButton("M+");
bOtheraddActionListener(this);
bOthersetForeground(Colorblue);
bOthersetMargin(new Insets(3,2,3,2));
pLeftadd(bOther);
pBottomadd(pLeft,BorderLayoutWEST);
JPanel pRight = new JPanel();
pRightsetLayout(new BorderLayout());
JPanel pUp = new JPanel();
pUpsetLayout(new GridLayout(1,3,3,0));
bOther = new JButton("Backspace");
bOtheraddActionListener(this);
bOthersetForeground(Colorblue);
bOthersetMargin(new Insets(3,0,3,5));
pUpadd(bOther);
bOther = new JButton("CE");
bOtheraddActionListener(this);
bOthersetForeground(Colorblue);
pUpadd(bOther);
bOther = new JButton("C");
bOtheraddActionListener(this);
bOthersetForeground(Colorblue);
pUpadd(bOther);
JPanel pDown = new JPanel();
pDownsetLayout(new GridLayout(4,5,3,2));
bNumber = new JButton("7");
bNumbersetForeground(Colorred);
bNumberaddActionListener(this);
bNumbersetMargin(new Insets(3,3,3,3));
pDownadd(bNumber);
bNumber = new JButton("8");
bNumbersetForeground(Colorred);
bNumberaddActionListener(this);
bNumbersetMargin(new Insets(3,3,3,3));
pDownadd(bNumber);
bNumber = new JButton("9");
bNumbersetForeground(Colorred);
bNumberaddActionListener(this);
bNumbersetMargin(new Insets(3,3,3,3));
pDownadd(bNumber);
bOperator = new JButton("/");
bOperatorsetForeground(Colorblue);
bOperatoraddActionListener(this);
bOperatorsetMargin(new Insets(3,0,3,0));
pDownadd(bOperator);
bOperator = new JButton("sqrt");
bOperatoraddActionListener(this);
bOperatorsetForeground(Colorred);
bOperatorsetMargin(new Insets(3,0,3,0));
pDownadd(bOperator);
bNumber = new JButton("4");
bNumbersetForeground(Colorred);
bNumberaddActionListener(this);
bNumbersetMargin(new Insets(3,3,3,3));
bNumbersetHorizontalTextPosition(JButtonLEFT);
pDownadd(bNumber);
bNumber = new JButton("5");
bNumbersetForeground(Colorred);
bNumberaddActionListener(this);
bNumbersetMargin(new Insets(3,3,3,3));
pDownadd(bNumber);
bNumber = new JButton("6");
bNumbersetForeground(Colorred);
bNumberaddActionListener(this);
bNumbersetMargin(new Insets(3,3,3,3));
pDownadd(bNumber);
bOperator = new JButton("");
bOperatorsetForeground(Colorblue);
bOperatoraddActionListener(this);
bOperatorsetMargin(new Insets(3,3,3,3));
pDownadd(bOperator);
bOperator = new JButton("%");
bOperatorsetForeground(Colorred);
bOperatoraddActionListener(this);
bOperatorsetMargin(new Insets(3,3,3,3));
pDownadd(bOperator);
bNumber = new JButton("1");
bNumbersetForeground(Colorred);
bNumberaddActionListener(this);
bNumbersetMargin(new Insets(3,3,3,3));
pDownadd(bNumber);
bNumber = new JButton("2");
bNumbersetForeground(Colorred);
bNumberaddActionListener(this);
bNumbersetMargin(new Insets(3,3,3,3));
pDownadd(bNumber);
bNumber = new JButton("3");
bNumbersetForeground(Colorred);
bNumberaddActionListener(this);
bNumbersetMargin(new Insets(3,3,3,3));
pDownadd(bNumber);
bOperator = new JButton("-");
bOperatorsetForeground(Colorblue);
bOperatoraddActionListener(this);
bOperatorsetMargin(new Insets(3,3,3,3));
pDownadd(bOperator);
bOperator = new JButton("1/x");
bOperatorsetForeground(Colorred);
bOperatoraddActionListener(this);
pDownadd(bOperator);
bNumber = new JButton("0");
bNumbersetForeground(Colorred);
bNumberaddActionListener(this);
bNumbersetMargin(new Insets(3,3,3,3));
pDownadd(bNumber);
bOperator = new JButton("+/-");
bOperatorsetForeground(Colorred);
bOperatoraddActionListener(this);
bOperatorsetMargin(new Insets(3,3,3,3));
pDownadd(bOperator);
bOperator = new JButton("");
bOperatorsetForeground(Colorred);
bOperatoraddActionListener(this);
bOperatorsetMargin(new Insets(3,3,3,3));
pDownadd(bOperator);
bOperator = new JButton("+");
bOperatorsetForeground(Colorblue);
bOperatoraddActionListener(this);
bOperatorsetMargin(new Insets(3,3,3,3));
pDownadd(bOperator);
bOperator = new JButton("=");
bOperatorsetForeground(Colorred);
bOperatoraddActionListener(this);
bOperatorsetMargin(new Insets(3,3,3,3));
pDownadd(bOperator);
pRightadd(pUp,BorderLayoutNORTH);
pRightadd(pDown,BorderLayoutSOUTH);
pBottomadd(pRight,BorderLayoutEAST);
contentPaneadd(pBottom,BorderLayoutCENTER);
//创建状态栏
labwelcome=new JLabel("Welcome!");
pstatusbar=new JPanel();
pstatusbarsetPreferredSize(new Dimension(320,30));
time=new JTextField(10);//设置时间
timesetEditable(false);
date1=new JTextField(10);//设置日期
date1setEditable(false);
pstatusbaradd(labwelcome);
pstatusbaradd(date1);
pstatusbaradd(time);
datimeThread=new Thread(this);
datimeThreadstart();
contentPaneadd(pstatusbar,BorderLayoutSOUTH);
fsetSize(new Dimension(320,280));
fsetResizable(false);
fsetVisible(true);
faddWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
Systemexit(0);
}
}
);
}
public void actionPerformed(ActionEvent e)
{
String s=egetActionCommand();
if(sequals("复制(C)"))
{
String temp=tResultgetText()trim();
copyBoardreplace(0,copyBoardlength(),temp);
mPastesetEnabled(true);
}
else if(sequals("粘贴(P)"))
{
tResultsetText(copyBoardtoString());
}
else if(sequals("CE"))
{
//如果是CE则清除文本框 还要将存放结果的内容去除
strdelete(0, strlength());
tResultsetText("0");
}
else if(sequals("Backspace"))
{//如果是backspace则删除一个字符。
if(!tResultgetText()trim()equals("0"))
{ //如果文本框中有内容
if(strlength()!=1&&strlength()!=0)
{
tResultsetText(strdelete(strlength()-1,strlength())toString());
}else {
tResultsetText("0");
strsetLength(0);
}
}
op2=DoubleparseDouble(tResultgetText()trim());
}
else if(sequals("C"))
{//如果是C删除当前计算。
tResultsetText("0");
op1=op2=0;
strreplace(0,strlength()," ");
preOp=currentOp=0;
}
else if(sequals("MC"))
{ //如果是MC则清除缓冲区
String temp="";
memoryreplace(0,memorylength(),temp);
bMsetText(" ");
}
else if(sequals("MR"))
{ //如果按键为MR则恢复缓冲区的数到文本框
tResultsetText(memorytoString());
}
else if(sequals("MS"))
{//如果按键为MS则将文本框的数存入缓冲区
String s1=tResultgetText()trim();
memoryreplace(0,memorylength(),s1);
bMsetText("M");
}
else if(sequals("M+"))
{ //如果按键为MS则将文本框值与缓冲区的数相加但不显示结果。
String temp1=tResultgetText()trim();
double dtemp=DoubleparseDouble(temp1);
String temp2=memorytoString();
dtemp+=DoubleparseDouble(temp2);
temp1=StringvalueOf(dtemp);
memoryreplace(0,memorylength(),temp1);
}
else if(sequals("1/x"))
{//如果按键为1/x则将文本框中的数据置为它的倒数。
String temp=tResultgetText()trim();
double dtemp=DoubleparseDouble(temp);
tResultsetText(""+1/dtemp);
}
else if(sequals("+/-"))
{//如果按键为+/-则将文本框中的数据置为它的相反数。
String temp=tResultgetText()trim();
double dtemp=DoubleparseDouble(temp);
dtemp=(-1)dtemp;
tResultsetText(""+dtemp);
}
else if(sequals("%"))
{
String temp=tResultgetText()trim();
double dtemp=DoubleparseDouble(temp);
tResultsetText(""+dtemp);
}
else if(sequals("sqrt"))
{ //如果按键为sqrt则将文本框中的内容求平方根
String temp=tResultgetText()trim();
double dtemp=DoubleparseDouble(temp);
tResultsetText(""+Mathsqrt(dtemp));
}
else if(sequals("+"))//+
{
strsetLength(0);
if(currentOp==0)
{
preOp=currentOp=1;//op1=0;
op2=0;
tResultsetText(""+op1);
}else {
currentOp =preOp;
preOp =1;
switch(currentOp){
case 1:op1=op1+op2;tResultsetText(""+op1);break;
case 2:op1=op1-op2;tResultsetText(""+op1);break;
case 3:op1=op1op2;tResultsetText(""+op1);break;
case 4:op1=op1/op2;tResultsetText(""+op1);break;
}
}
}
else if(sequals("-"))//-
{
strsetLength(0);
if(currentOp==0)
{
preOp=currentOp=2;//op1=op2;op2=0;
tResultsetText(""+op1);
}
else
{
currentOp =preOp;
preOp =2;
switch(currentOp){
case 1:op1=op1+op2;tResultsetText(""+op1);break;
case 2:op1=op1-op2;tResultsetText(""+op1);break;
case 3:op1=op1op2;tResultsetText(""+op1);break;
case 4:op1=op1/op2;tResultsetText(""+op1);break;
}
}
}
else if(sequals(""))//
{
strsetLength(0);
if(currentOp==0)
{
preOp=currentOp=3;//op1=op2;op2=1;
tResultsetText(""+op1);//op1=op2;
}
else
{
currentOp =preOp;
preOp =3;
switch(currentOp){
case 1:op1=op1+op2;tResultsetText(""+op1);break;
case 2:op1=op1-op2;tResultsetText(""+op1);break;
case 3:op1=op1op2;tResultsetText(""+op1);break;
case 4:op1=op1/op2;tResultsetText(""+op1);break;
}
}
}
else if(sequals("/"))// /
{
strsetLength(0);
if(currentOp==0)
{
preOp=currentOp=4;//op2=1;
tResultsetText(""+op1);//op1=op2;
}
else
{
currentOp =preOp;
preOp =4;
switch(currentOp){
case 1:op1=op1+op2;tResultsetText(""+op1);break;
case 2:op1=op1-op2;tResultsetText(""+op1);break;
case 3:op1=op1op2;tResultsetText(""+op1);break;
case 4:op1=op1/op2;tResultsetText(""+op1);break;
}
}
}
else if(sequals("="))// =
{
if(currentOp==0)
{
strsetLength(0);
tResultsetText(""+op2);
}
else
{
strsetLength(0);
currentOp =preOp;
switch(currentOp){
case 1:op1=op1+op2;tResultsetText(""+op1);break;
case 2:op1=op1-op2;tResultsetText(""+op1);break;
case 3:op1=op1op2;tResultsetText(""+op1);break;
case 4:op1=op1/op2;tResultsetText(""+op1);break;
}
currentOp=0;
op2=0;
}
}
else if(sequals(""))
{
isDouble=true;
if(tResultgetText()trim()indexOf('')!=-1);
else
{
if(tResultgetText()trim()equals("0"))
{
strsetLength(0);
tResultsetText((strappend("0"+s))toString());
}
//else if(tResultgetText()trim()equals("")){}//如果初时显示为空则不做任何 *** 作
else
{
tResultsetText((strappend(s))toString());
}
}
}
else if(sequals("0"))//如果选择的是"0"这个数字键
{
if(tResultgetText()trim()equals("0")){}
else
{
tResultsetText(strappend(s)toString());
op2=DoubleparseDouble(tResultgetText()trim());
}
}
else
{
tResultsetText(strappend(s)toString());
op2=DoubleparseDouble(tResultgetText()trim());
if(currentOp==0)
op1=op2;
}
}//end actionPerformed
public void run()
{
while(datimeThread!=null)
{
display();
try
{
datimeThreadsleep(1000);
}
catch(InterruptedException e)
{}
}
}
public void display()
{
Calendar calendar=CalendargetInstance();
calendarsetTime(new Date());
String strDate=calendarget(CalendarYEAR)+"/"+calendarget(CalendarMONTH)+"/"+calendarget(CalendarDAY_OF_MONTH)+" 星期"+(calendarget(CalendarDAY_OF_WEEK)-1);
String strTime=calendarget(CalendarHOUR_OF_DAY)+":"+calendarget(CalendarMINUTE)+":"+calendarget(CalendarSECOND);
timesetText(strTime);
date1setText(strDate);
}
public static void main(String[] args)
{
new MyCalculator();
}
}
public class Counter extends JFrame implements ActionListener{
/
Comment for <code>serialVersionUID</code>
/
private static final long serialVersionUID = -1379168350413982454L;
TextField num1;
TextField num2;
TextField result;
JButton clear;
JButton plus;
JTextArea j1;
JTextArea j2;
JButton aa;
public Counter(){
num1 = new TextField(5);//定义加数1
num2 = new TextField(5);//定义加数2
result = new TextField(5);//定义结果
plus=new JButton("加");//定义加法按钮
clear = new JButton("清空");//定义清空按钮
j1 = new JTextArea("+");//定义符号 +
j2 = new JTextArea("=");//定义符号 =
j1setEditable(false);//定义属性只读
j2setEditable(false);//定义加数1
resultsetEditable(false);//定义加数1
aa = new JButton("隐藏");
thisadd(num1);
thisadd(j1);
thisadd(num2);
thisadd(j2);
thisadd(result);
thisadd(plus);
thisadd(clear);
thisadd(aa);
thissetLayout(new FlowLayout());
thissetBackground(Colorwhite);
thissetVisible(true);
thissetSize(500,200);
thissetTitle("计算器");
thissetLocationRelativeTo(null);//窗口初始位置在中间
plusaddActionListener(this);
clearaddActionListener(this);
aaaddActionListener(this);
thisaddWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
Systemexit(0);
}
});
}
public void actionPerformed(ActionEvent e){
if (egetSource()==clear){//点击清空按钮
num1setText("");
num2setText("");
resultsetText("");
}else if(egetSource()==plus){//点击“加”按钮
resultsetText(IntegerparseInt(num1getText())+IntegerparseInt(num2getText())+"");
}else if(egetSource()==aa){
aasetVisible(false);
}
}
public static void main(String[] args) {
new Counter();
}
/
判断输入的是否是数字
@param str
@return
/
public static boolean isInt(String str){
try {
IntegerparseInt(str);
} catch (Exception e) {
return false;
}
return true;
}
}
package bookgui;
import javaawtBorderLayout;
import javaawtColor;
import javaawtGridLayout;
import javaawteventActionEvent;
import javaawteventActionListener;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingJPanel;
import javaxswingJTextField;
/
一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。
但还不支持键盘 *** 作。
/
public class Calculator extends JFrame implements ActionListener {
/ 计算器上的键的显示名字 /
private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",
"", "%", "1", "2", "3", "-", "1/x", "0", "+/-", "", "+", "=" };
/ 计算器上的功能键的显示名字 /
private final String[] COMMAND = { "Backspace", "CE", "C" };
/ 计算器左边的M的显示名字 /
private final String[] M = { " ", "MC", "MR", "MS", "M+" };
/ 计算器上键的按钮 /
private JButton keys[] = new JButton[KEYSlength];
/ 计算器上的功能键的按钮 /
private JButton commands[] = new JButton[COMMANDlength];
/ 计算器左边的M的按钮 /
private JButton m[] = new JButton[Mlength];
/ 计算结果文本框 /
private JTextField resultText = new JTextField("0");
// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private boolean firstDigit = true;
// 计算的中间结果。
private double resultNum = 00;
// 当前运算的运算符
private String operator = "=";
// *** 作是否合法
private boolean operateValidFlag = true;
/
构造函数
/
public Calculator(){
super();
//初始化计算器
init();
//设置计算器的背景颜色
thissetBackground(ColorLIGHT_GRAY);
thissetTitle("计算器");
//在屏幕(500, 300)坐标处显示计算器
thissetLocation(500, 300);
//不许修改计算器的大小
thissetResizable(false);
//使计算器中各组件大小合适
thispack();
}
/
初始化计算器
/
private void init() {
// 文本框中的内容采用右对齐方式
resultTextsetHorizontalAlignment(JTextFieldRIGHT);
// 不允许修改结果文本框
resultTextsetEditable(false);
// 设置文本框背景颜色为白色
resultTextsetBackground(ColorWHITE);
//初始化计算器上键的按钮,将键放在一个画板内
JPanel calckeysPanel = new JPanel();
//用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calckeysPanelsetLayout(new GridLayout(4, 5, 3, 3));
for (int i = 0; i < KEYSlength; i++) {
keys[i] = new JButton(KEYS[i]);
calckeysPaneladd(keys[i]);
keys[i]setForeground(Colorblue);
}
//运算符键用红色标示,其他键用蓝色表示
keys[3]setForeground(Colorred);
keys[8]setForeground(Colorred);
keys[13]setForeground(Colorred);
keys[18]setForeground(Colorred);
keys[19]setForeground(Colorred);
//初始化功能键,都用红色标示。将功能键放在一个画板内
JPanel commandsPanel = new JPanel();
//用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
commandsPanelsetLayout(new GridLayout(1, 3, 3, 3));
for (int i = 0; i < COMMANDlength; i++) {
commands[i] = new JButton(COMMAND[i]);
commandsPaneladd(commands[i]);
commands[i]setForeground(Colorred);
}
//初始化M键,用红色标示,将M键放在一个画板内
JPanel calmsPanel = new JPanel();
//用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calmsPanelsetLayout(new GridLayout(5, 1, 3, 3));
for (int i = 0; i < Mlength; i++) {
m[i] = new JButton(M[i]);
calmsPaneladd(m[i]);
m[i]setForeground(Colorred);
}
//下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部,
//将文本框放在北部,将calms画板放在计算器的西部。
//新建一个大的画板,将上面建立的command和calckeys画板放在该画板内
JPanel panel1 = new JPanel();
//画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素
panel1setLayout(new BorderLayout(3, 3));
panel1add("North", commandsPanel);
panel1add("Center", calckeysPanel);
//建立一个画板放文本框
JPanel top = new JPanel();
topsetLayout(new BorderLayout());
topadd("Center", resultText);
//整体布局
getContentPane()setLayout(new BorderLayout(3, 5));
getContentPane()add("North", top);
getContentPane()add("Center", panel1);
getContentPane()add("West", calmsPanel);
//为各按钮添加事件侦听器
//都使用同一个事件侦听器,即本对象。本类的声明中有implements ActionListener
for (int i = 0; i < KEYSlength; i++) {
keys[i]addActionListener(this);
}
for (int i = 0; i < COMMANDlength; i++) {
commands[i]addActionListener(this);
}
for (int i = 0; i < Mlength; i++) {
m[i]addActionListener(this);
}
}
/
处理事件
/
public void actionPerformed(ActionEvent e) {
//获取事件源的标签
String label = egetActionCommand();
if (labelequals(COMMAND[0])){
//用户按了"Backspace"键
handleBackspace();
} else if (labelequals(COMMAND[1])) {
//用户按了"CE"键
resultTextsetText("0");
} else if (labelequals(COMMAND[2])){
//用户按了"C"键
handleC();
} else if ("0123456789"indexOf(label) >= 0) {
//用户按了数字键或者小数点键
handleNumber(label);
// handlezero(zero);
} else {
//用户按了运算符键
handleOperator(label);
}
}
/
处理Backspace键被按下的事件
/
private void handleBackspace() {
String text = resultTextgetText();
int i = textlength();
if (i > 0) {
//退格,将文本最后一个字符去掉
text = textsubstring(0, i - 1);
if (textlength() == 0) {
//如果文本没有了内容,则初始化计算器的各种值
resultTextsetText("0");
firstDigit = true;
operator = "=";
} else {
//显示新的文本
resultTextsetText(text);
}
}
}
/
处理数字键被按下的事件
@param key
/
private void handleNumber(String key) {
if (firstDigit) {
//输入的第一个数字
resultTextsetText(key);
} else if ((keyequals("")) && (resultTextgetText()indexOf("") < 0)){
//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
resultTextsetText(resultTextgetText() + "");
} else if (!keyequals("")) {
//如果输入的不是小数点,则将数字附在结果文本框的后面
resultTextsetText(resultTextgetText() + key);
}
//以后输入的肯定不是第一个数字了
firstDigit = false;
}
/
处理C键被按下的事件
/
private void handleC() {
//初始化计算器的各种值
resultTextsetText("0");
firstDigit = true;
operator = "=";
}
/
处理运算符键被按下的事件
@param key
/
private void handleOperator(String key) {
if (operatorequals("/")) {
//除法运算
//如果当前结果文本框中的值等于0
if (getNumberFromText() == 00){
// *** 作不合法
operateValidFlag = false;
resultTextsetText("除数不能为零");
} else {
resultNum /= getNumberFromText();
}
} else if (operatorequals("1/x")) {
//倒数运算
if (resultNum == 00){
// *** 作不合法
operateValidFlag = false;
resultTextsetText("零没有倒数");
} else {
resultNum = 1 / resultNum;
}
} else if (operatorequals("+")){
//加法运算
resultNum += getNumberFromText();
} else if (operatorequals("-")){
//减法运算
resultNum -= getNumberFromText();
} else if (operatorequals("")){
//乘法运算
resultNum = getNumberFromText();
} else if (operatorequals("sqrt")) {
//平方根运算
resultNum = Mathsqrt(resultNum);
} else if (operatorequals("%")){
//百分号运算,除以100
resultNum = resultNum / 100;
} else if (operatorequals("+/-")){
//正数负数运算
resultNum = resultNum (-1);
} else if (operatorequals("=")){
//赋值运算
resultNum = getNumberFromText();
}
if (operateValidFlag) {
//双精度浮点数的运算
long t1;
double t2;
t1 = (long) resultNum;
t2 = resultNum - t1;
if (t2 == 0) {
resultTextsetText(StringvalueOf(t1));
} else {
resultTextsetText(StringvalueOf(resultNum));
}
}
//运算符等于用户按的按钮
operator = key;
firstDigit = true;
operateValidFlag = true;
}
/
从结果文本框中获取数字
@return
/
private double getNumberFromText() {
double result = 0;
try {
result = DoublevalueOf(resultTextgetText())doubleValue();
} catch (NumberFormatException e){
}
return result;
}
public static void main(String args[]) {
Calculator calculator1 = new Calculator();
calculator1setVisible(true);
calculator1setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
}
}
package bookgui;
import javaxswingJFrame;
import javaxswingSwingUtilities;
import javaxswingUIManager;
import javaxswingUnsupportedLookAndFeelException;
import javaxswingplafmetalMetalLookAndFeel;
import comsunjavaswingplafmotifMotifLookAndFeel;
import comsunjavaswingplafwindowsWindowsLookAndFeel;
/
更改窗体、组件的外观
/
public class LookAndFeel {
public static void main(String[] args) {
/
Metal风格——"javaxswingplafmetalMetalLookAndFeel"
Motif风格——"comsunjavaswingplafmotifMotifLookAndFeel"
Windows风格——"comsunjavaswingplafwindowsWindowsLookAndFeel"
/
Calculator calculator1 = new Calculator();
calculator1setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
//3个不同的风格
/
LookAndFeel是一个抽象类,除了提供了一些static方法,还定义了一些抽象的个性化设置方法来由子类实现。
从JDK113开始,Sun提供了三个LookAndFeel的子类
/
String lnfName = "javaxswingplafmetalMetalLookAndFeel";
// String lnfName = "comsunjavaswingplafmotifMotifLookAndFeel";
// String lnfName = "comsunjavaswingplafwindowsWindowsLookAndFeel";
try {
// UIManager负责跟踪当前的外观及其默认设置,setLookAndFeel方法将设置它的LookAndFeel的类全名
UIManagersetLookAndFeel(lnfName);
// setLookAndFeel还可以直接设置设置对象
UIManagersetLookAndFeel(new MetalLookAndFeel());
// UIManagersetLookAndFeel(new MotifLookAndFeel());
// UIManagersetLookAndFeel(new WindowsLookAndFeel());
//SwingUtilities是一个Swing的工具类,提供了很多静态方法。
//updateComponentTreeUI将更新calculator1中所有组件的外观
SwingUtilitiesupdateComponentTreeUI(calculator1);
}
catch (UnsupportedLookAndFeelException ex1) {
Systemerrprintln("Unsupported LookAndFeel: " + lnfName);
}
catch (ClassNotFoundException ex2) {
Systemerrprintln("LookAndFeel class not found: " + lnfName);
}
catch (InstantiationException ex3) {
Systemerrprintln("Could not load LookAndFeel: " + lnfName);
}
catch (IllegalAccessException ex4) {
Systemerrprintln("Cannot use LookAndFeel: " + lnfName);
}
calculator1setVisible(true);
}
}
package 计算器;
import javaawt;
import javaawtevent;
public class computer implements WindowListener,ActionListener{
private Frame f;
double d0,d1,d2,result;
boolean flag=true;
String s,oper;
TextField tf1;
Panel p=new Panel();
public static void main(String args[])
{ computer e=new computer();
ego();
}
public void go(){
int i;
result=0;
s=new String();
oper=new String("+");
f=new Frame("计算器");
MenuBar mb=new MenuBar();
fsetMenuBar(mb);
Menu m1=new Menu("编辑");
Menu m2=new Menu("帮助");
Menu m3=new Menu("关于");
mbadd(m1);
mbadd(m3);
mbsetHelpMenu(m2);
tf1=new TextField("",15);
Button[] b=new Button[21];
for(i=1;i<21;i++)
{
b[i]=new Button();
b[i]setFont(new Font("仿宋",0,16));
}
b[1]setLabel("退格");
b[2]setLabel("CE");
b[3]setLabel("C");
b[4]setLabel("/");
b[5]setLabel("7");
b[6]setLabel("8");
b[7]setLabel("9");
b[8]setLabel("");
b[9]setLabel("4");
b[10]setLabel("5");
b[11]setLabel("6");
b[12]setLabel("-");
b[13]setLabel("1");
b[14]setLabel("2");
b[15]setLabel("3");
b[16]setLabel("+");
b[17]setLabel("0");
b[18]setLabel("+/-");
b[19]setLabel("");
b[20]setLabel("=");
psetLayout(new GridLayout(5,4));
psetBackground(new Color(80,30,100));
for(i=1;i<21;i++)
{ padd(b[i]);
b[i]addActionListener(this);
b[i]setBackground(new Color(20,130,180));
b[i]setForeground(Coloryellow);
}
for(i=1;i<4;i++)
{
b[i]setBackground(new Color(120,180,170));
b[i]setForeground(Colorblue);
}
for(i=1;i<=4;i++)
{ b[i4]setBackground(new Color(120,180,170));
b[i4]setForeground(Colorred);
}
b[20]setBackground(Colorred);
faddWindowListener(this);
fsetLayout(new BorderLayout());
fadd("North",tf1);
fadd("Center",p);
fsetSize(200,200);
fsetVisible(true);
}
public void windowClosing(WindowEvent e){Systemexit(1);}
public void windowOpened(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
public void actionPerformed(ActionEvent e){
String i1=tf1getText();
s=egetActionCommand();
if(s=="0"| s=="1"|s=="2"|s=="3"|s=="4"|s=="5"|s=="6"|s=="7"|s=="8"|s=="9"|s=="")
{ if(flag) tf1setText(i1+s);
else
{ tf1setText(s);
flag=true;
}
}
else if(s=="+"|s=="-"|s==""|s=="/")
{ result=DoubleparseDouble(i1);
flag=false;
oper=s;
}
else if(s=="=")
{ d0=DoubleparseDouble(i1);
if(oper=="+") result+=d0;
if(oper=="-") result-=d0;
if(oper=="") result=d0;
if(oper=="/") result/=d0;
tf1setText(DoubletoString(result));
flag=false;
}
else if(s=="CE")
{ tf1setText("");
flag=false;
}
else if(s=="C")
{ result=0;
tf1setText("");
flag=false;
}
else if(s=="退格")
{ String ss=tf1getText();
int i=sslength();
ss=sssubstring(0,i-1);
tf1setText(ss);
}
else if(s=="+/-")
{ d2=-1DoubleparseDouble(tf1getText());
tf1setText(DoubletoString(d2));
}
}
}
进口的javaawtBorderLayout;
进口javaawtGridLayout中;
进口javaawteventActionEvent;
进口javaawteventActionListener;
进口的javax。 swingJButton;
进口javaxswingJFrame中;
进口javaxswingJPanel;
进口javaxswingJTextField中;
/ /暂时不考虑这个问题甚至添加
/ /点的第二个 *** 作点的 *** 作员点运算符点=结果
公共类计算器实现的ActionListener {
> JTextField的JTF =新的JTextField(10);
私人布尔追加= FALSE;
私人字符串OP1 =“0”;
私人字符串运算符=“+”;
@覆盖
公共无效的actionPerformed(ActionEvent的E){
字符串COMN = egetActionCommand();。!
/ /处理数字
如果(“0123456789”的indexOf(COMN)= -1){
如果(追加){/ /追加
字符串温度= jtfgetText() ;
jtfsetText(温度+ COMN);
}其他{/ /替换
jtfsetText(COMN);
追加= TRUE;
/ /处理运营商
否则,如果(“+ - /”的indexOf(COMN)= -1){
OP1 = JTF。的getText();
运算符= COMN;
追加= FALSE;
的} else if(“=”的indexOf(COMN)= -1。){
字符串OP2 = jtfgetText();
双D1 = DoubleparseDouble(OP1);
双D2 = DoubleparseDouble(OP2);
如果(“+”等于( *** 作者)。){
D1 = D1 + D2;
}否则,如果(“ - ”等于( *** 作员)。){
D1 = D1 - D2;
}否则,如果(“”的equals( *** 作员)。){
D1 = D1 D2;
的} else if(“/”等于( *** 作者)。){
D1 = D1 / D2;
jtfsetText(D1 +“”);
追加= FALSE;
}否则,如果(等于(COMN)“。”){
字符串温度= jtfgetText();
如果(tempindexOf(“;”)== -1){
jtfsetText(温度+“。”);
追加= TRUE;
否则,如果(“+ / - ”的equals(COMN)){
字符串温度= jtfgetText();
如果(tempstartsWith(“-1”)){
JTF。的setText(tempsubstring(1));
}其他{
jtfsetText(“ - ”+温度);
否则,如果(“退格”。等于(COMN)){
字符串温度= jtfgetText();
如果(templength()> 0){
jtfsetText(tempsubstring(0,templength() - 1));
}
的} else if(“CE”等于(COMN)| |“C”等于(COMN)){
jtfsetText(“0”);
追加= FALSE;
公众计算器(){
JFrame的JF =新的JFrame(“计算器”);
jfadd(JTF,BorderLayoutNORTH);
字串[] S1 = {“退格”,“CE”,“C”,“+”,“7”,“8”,“9”,“/”,“4”,
“5”,“6”,“”,“1”,“2”,“3”,“ - ”,“0”,“+ / - ”,“”,。 “=”};
的JPanel JP =新的JPanel();
jfadd(JP,使用BorderLayoutCENTER);
网格布局GL =新的网格布局(5,4); jpsetLayout(GL);
JButton的[] JB =新的JButton [s1length];
为(int i = 0;我<s1length,我+ +){
JB [我] =新的JButton(S1由[i]);
jpadd(JB由[i]);。
JB [I] addActionListener方法,(这);
} jfadd(JP);
jtfsetEditable(假);
jfsetLocation(400,300);
jfpack();
jfsetResizable(假);/ /设置窗口不可改变
jfsetDefaultCloseOperation(jfEXIT_ON_CLOSE);
jfsetVisible(真);
公共静态无效的主要(字串[] args){
新的计算器();
这个函数比较简单,不知道能不能满足要求
现在是一段核心程序,只有单位数的四则运算,需要实现多位数运算和小数点功能,最好还有正负号。万分感谢!
import javaawt;
import javaapplet;
public class calc10 extends Applet {
char key,prevopr;
float ans,num;
char[] btext={'0','1','2','3','4','5',
'6','7','8','9','-','+','','/'};
Button[] buttons = new Button[btextlength];
public void init() {
for (int i=0; i<btextlength; i++) {
buttons[i] = new Button(""+btext[i]);
add(buttons[i]);
}
}
public float apply(float num1, char opr, float num2) {
switch (opr) {
case '+': return(ans+num);
case '-': return(ans-num);
case '': return(ansnum);
case '/': return(ans/num);
default: return(num);
}
}
public boolean action(Event evt,Object arg){
key = ((String)arg)charAt(0);
if(key>='0' && key<='9') {
num = (float)(key-'0');
showStatus(""+key);
} else {
ans = apply(ans,prevopr,num);
showStatus( "" + ans );
prevopr=key;
}
return true;
}
}
以上就是关于用java设计一个计算器 1.可以没有界面,但要有输入和输出 2.整数,小数,加减乘除,求余,括号全部的内容,包括:用java设计一个计算器 1.可以没有界面,但要有输入和输出 2.整数,小数,加减乘除,求余,括号、java计算器程序、java编程设计计算器 急急急!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)