import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.*;import javax.swing.*;
public class Calcculator { public static void main(String[] args) {
new CalFrame("Title"); }}class CalFrame extends Frame implements ActionListener{

/*和显示时间相关的参数
 * private static final long ONE_SECOND = 1000;
//static JLabel displayArea = new JLabel();
private static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";*/
JButton[] button = new JButton[10];
String[] str = {"+","-","*","/","(",")","清零","计算","时间","日期"};
JButton[] bt = new JButton[10];
static JLabel screen = new JLabel("Designed By Luger");
JPanel pDown = new JPanel();
int width1,height1;
Toolkit tk = Toolkit.getDefaultToolkit();
static StringBuilder  text = new StringBuilder();
static int j = 0;

CalFrame(String s) {
super(s);

Dimension screenSize = tk.getScreenSize();
width1 = screenSize.width;
height1 = screenSize.height;
int w = (width1-300)/2,h = (height1-300)/2;
setBounds(w, h,260,260 );
pDown.setSize(290, 220);
//screen.setColumns(30);
for(int i=0;i<button.length;i++) {
button[i] = new JButton(String.valueOf(i));  //开始的时候写成button[i].setName(i+"");
} //for

for(int i=0;i<str.length;i++) {
bt[i] = new JButton(str[i]);
} //for

pDown.setLayout(new GridLayout(5, 4));
pDown.add(button[9]);pDown.add(button[8]);pDown.add(button[7]);pDown.add(bt[0]);
pDown.add(button[6]);pDown.add(button[5]);pDown.add(button[4]);pDown.add(bt[1]);
pDown.add(button[3]);pDown.add(button[2]);pDown.add(button[1]);pDown.add(bt[2]);
pDown.add(bt[4]);pDown.add(button[0]);pDown.add(bt[5]);pDown.add(bt[3]);
pDown.add(bt[6]);pDown.add(bt[7]);pDown.add(bt[8]);pDown.add(bt[9]);

this.setLayout(new BorderLayout());
this.setResizable(false);
this.add(screen,BorderLayout.NORTH);
this.add(pDown,BorderLayout.CENTER);
this.setVisible(true);

for(int i=0;i<button.length;i++) {
button[i].addActionListener(this);
}//for

for(int i=0;i<bt.length;i++) {
bt[i].addActionListener(this);
}

this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
System.exit(1);
}
});


}//构造 String sText = null;
public void actionPerformed(ActionEvent e) {
JButton but = (JButton)e.getSource();
for(int i=0;i<button.length;i++) {
if(but==button[i]) {text.append(i+"");}
}//for

for(int i=0;i<6;i++) {
if(but==bt[i]) {text.append(str[i]);}
}//for

sText = text+"";
screen.setText(sText);
//String[] str = {"+","-","*","/","(",")","清零","计算","时间","日期"};
if(but==bt[6]) screen.setText("");
if(but==bt[7]) screen.setText(String.valueOf(jisuan(sText)));
if(but==bt[8]) {/*时间时间怎么加呢?*/};
if(but==bt[9]) ;
}

//下面是计算的程序

private static double jisuan(String s) {
//s = "1+3*(5-(4-3))+5";
List<String> items = parseExpr(s);
        return calcSubExpr(items);
}

private static double calcSubExpr(List<String> items) { if (items.contains("(")) {
int from = items.indexOf("(");
int to = items.lastIndexOf(")");
List<String> subList = items.subList(from + 1, to);
double result = calcSubExpr(subList);
remove(items, from - 1, from + 3);
items.add(from - 1, "" + result);
}
doMultiplyAndDivide(items);
doPlusAndNegate(items);
return Double.parseDouble(items.remove(0));
} // remove item from items[from,to]
private static void remove(List<String> items, int from, int to) {
// TODO Auto-generated method stub
for (int i = from; i < to; i++) {
items.remove(from);
}
} // do plus or Negate
private static void doPlusAndNegate(List<String> items) {
// TODO Auto-generated method stub for (int i = 0; i < items.size(); i++) {
String item = items.get(i);
if (item.equals("+") || item.equals("-")) {
double last = Double.parseDouble(items.remove(i - 1));
items.remove(i - 1);
double next = Double.parseDouble(items.remove(i - 1));
double result = calc(last, next, item);
items.add(i - 1, "" + result);
i = i - 1;
}
} } // do muilty or devide
private static void doMultiplyAndDivide(List<String> items) {
// TODO Auto-generated method stub for (int i = 0; i < items.size(); i++) {
String item = items.get(i);
if (item.equals("*") || item.equals("/")) {
double last = Double.parseDouble(items.remove(i - 1));
items.remove(i - 1);
double next = Double.parseDouble(items.remove(i - 1));
double result = calc(last, next, item);
items.add(i - 1, "" + result);
i = i - 1;
}
}
// print("After Multiply/Divide",items);
} private static double calc(double last, double next, String c) {
// TODO Auto-generated method stub char sign = c.charAt(0);
switch (sign) {
case '*':
return last * next;
case '/':
return last / next;
case '+':
return last + next;
case '-':
return last - next;
}
return 0;
} private static List<String> parseExpr(String expr) {
// TODO Auto-generated method stub
List<String> items = new ArrayList<String>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < expr.length(); i++) {
char c = expr.charAt(i);
if (isDelim(c)) {
items.add(sb.toString());
items.add("" + c);
sb = new StringBuilder();
} else {
sb.append(c);
}
if (i == expr.length() - 1)
items.add(sb.toString());
}
return items;
} private static boolean isDelim(char c) {
if (("+-*/%^=()".indexOf(c) != -1))
return true;
return false;
}

//下面是显示时间

/*本打算用这个显示时间的 但是行不通啊
 * private void configTimeArea() {
Timer tmr = new Timer();
tmr.scheduleAtFixedRate(new JLabelTimerTask(), new Date(), ONE_SECOND);
} *//**
 * Timer task to update the time display area
 * 
 *//*
protected class JLabelTimerTask extends TimerTask { SimpleDateFormat dateFormatter = new SimpleDateFormat(
DEFAULT_TIME_FORMAT); public void run() {
String time = dateFormatter
.format(Calendar.getInstance().getTime());
screen.setText("当前时间是:"+time);
}

public void runIT() {
JLabelTimerTask t = new JLabelTimerTask();
t.run();
}
}*/

}//calFrame点击时间 label上显示时间 动态的哦

解决方案 »

  1.   

    加时间还不简单 new个date变量,然后把这个时间变量打印到你界面好了 print方法
      

  2.   

    动态时间用定时器,timerclass ShowTime extends java.util.TimerTask{
          private JLabel show;
          public showTime(JLabel show){   //把label传进来
             this.show = show
          }
          public void run(){
              String time = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss").format(new java.util.Date())      }
    }
    //调用:
    new java.util.Timer().schedule(new showTime(label),0,1000)
      

  3.   

    用线程哦,再去实现Runnable接口吧,这样也简单