刚刚学完图形Gui. 现在老师的课程在讲io流
目前老师布置的第一个项目.就是的计算器.
但是之前所学的代码全部存在脑子了.根本不知道如何运用.<小弟以前没有编程的基础>
界面是很轻松的做出来.但是.事件监听 +-*/要如何让他运算. 不知道如何着手.
请各位大虾稍微指点一下小弟.感激不尽.!
目前老师布置的第一个项目.就是的计算器.
但是之前所学的代码全部存在脑子了.根本不知道如何运用.<小弟以前没有编程的基础>
界面是很轻松的做出来.但是.事件监听 +-*/要如何让他运算. 不知道如何着手.
请各位大虾稍微指点一下小弟.感激不尽.!
应该有三个不同的监听器吧
分别监听
“+-*/”四个键
“=”一个键
还有十个数字键
再做一个清0的按钮就全了贴一个监听数字键的
class Monitor3 implements ActionListener{
MyFrame mf = null;
public Monitor3(MyFrame mf) {
this.mf = mf;
}
public void actionPerformed(ActionEvent e) {
if (mf.num1.getText().equals("0")){
//num1 是TextField
mf.num1.setText(e.getActionCommand());
} //获取按键上的字符并显示
else{
mf.num1.setText(mf.num1.getText()+e.getActionCommand());
}
}
}献丑了
如果不显示计算公式,而且不考虑优先级,那应该比较简单我贴一个以前写的吧,你参考看看import java.awt.*;
import java.awt.event.*;
public class Calculator extends WindowAdapter implements ActionListener {
private double result=0,data1=0,radixPointDepth=1;
private boolean radixPointIndicate=false,resultIndicate=false;
private char prec='+';
private Frame f;
private TextField tf;
private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17;
private Panel p;
private static String a="";
static public void main(String args[]) {
Calculator de=new Calculator();
de.go();
}
public void go() {
f=new Frame("傻瓜计算器");
p=new Panel();
p.setLayout(new GridLayout(4,4));
tf=new TextField(30);
b1=new Button("7");
b2=new Button("8");
b3=new Button("9");
b4=new Button("+");
b5=new Button("4");
b6=new Button("5");
b7=new Button("6");
b8=new Button("-");
b9=new Button("1");
b10=new Button("2");
b11=new Button("3");
b12=new Button("*");
b13=new Button("0");
b14=new Button(".");
b15=new Button("=");
b16=new Button("/");
b17=new Button("清零");
f.add(tf,"North");
f.add(p,"Center");
f.add(b17,"South");
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(b10);
p.add(b11);
p.add(b12);
p.add(b13);
p.add(b14);
p.add(b15);
p.add(b16);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b10.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
b17.addActionListener(this);
f.addWindowListener(this);
f.setSize(250,190);
f.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
String s;
s=e.getActionCommand();
switch(s.charAt(0)) {
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
if(resultIndicate) {
result=0;
data1=0;
prec='+';
}
Integer Int1=new Integer(s);
if(radixPointIndicate) {
radixPointDepth=radixPointDepth/10;
data1=data1+(Int1.intValue())*radixPointDepth;
} else {
data1=data1*10+(Int1.intValue());
}
Double displayNumber=new Double(data1);
tf.setText(a+displayNumber.toString());
resultIndicate=false;
break;
case '+': case '-':case '*':case '/':case '=':
if(s.charAt(0)!='='&&resultIndicate) { //不是等于而且真
prec=s.charAt(0);
resultIndicate=false;
} else {
switch(prec) {
case '+':
result=result+data1;
break;
case '-':
result=result-data1;
break;
case '*':
result=result*data1;
break;
case '/':
result=result/data1;
break;
}
}
radixPointIndicate=false;
radixPointDepth=1;
displayNumber=new Double(result);
a=new String(displayNumber.toString()+s.charAt(0));
if(s.charAt(0)=='='){
tf.setText(displayNumber.toString());
}else{
tf.setText(a);
}
if(s.charAt(0)!='=') { //不是等于
data1=0;
prec=s.charAt(0);
} else {
resultIndicate=true;
}
break;
case '.':
radixPointIndicate=true;
break;
}
if(s.equals("清零")) {
result=0;
data1=0;
radixPointDepth=1;
tf.setText("");
a="";
}
}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
http://blog.csdn.net/breezes2008/archive/2009/05/03/4146234.aspx
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;public class Calculator implements ActionListener{
private JFrame jf;
private JTextField jtf;
private JButton[] jb;
private double number1=0,number2;
private char operator;
public Calculator(){
jf=new JFrame("我的计算器");
jf.setLayout(new BorderLayout());
jtf=new JTextField(20);
jtf.setFont(new Font("宋体",Font.BOLD,20));
jtf.setBackground(Color.BLACK);
jtf.setForeground(Color.WHITE);
// jtf.setBackground(Color.BLACK);
String str="123+456-789*.0=/";
jb=new JButton[str.length()];
for(int i=0;i<jb.length;i++){
jb[i]=new JButton(str.charAt(i)+"");
jb[i].setFont(new Font("宋体",Font.BOLD,20));
jb[i].setBackground(Color.BLACK);
jb[i].setForeground(Color.WHITE);
jb[i].addActionListener(this);
}
init();
}
private void init(){
JPanel jp1=new JPanel();
JPanel jp2=new JPanel();
jp2.setLayout(new GridLayout(4,4));
jp1.add(jtf);
for(int i=0;i<jb.length;i++){
jp2.add(jb[i]);
}
jp1.setLayout(new FlowLayout());
jf.add(jp1,BorderLayout.NORTH);
jf.add(jp2,BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent e) {
String command=e.getActionCommand();
if(command.equals("+")||command.equals("-")||
command.equals("*")||command.equals("/")){
operatorHandle(command);
}else if(command.equals("=")){
equalHandle(command);
}
else {
numberHandle(command);
}
}
public void equalHandle(String command){
double result=0.0;
number2=Double.parseDouble(jtf.getText());
// operator = command.charAt(0);
switch(operator){
case '+': result = number1+number2;break;
case '-': result = number1-number2;break;
case '*': result = number1*number2;break;
case '/': result = number1/number2;break;
}
jtf.setText(result+"");
number1=result;
number2=0;
operator=0;
}
public void operatorHandle(String command){
operator = command.charAt(0);
number1=Double.parseDouble(jtf.getText());
jtf.setText("");
}
public void numberHandle(String command){
jtf.setText(jtf.getText()+command);
}
public void showMe(){
jf.setSize(251, 300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}}
import javax.swing.*;
import java.awt.event.*;
public class CalculatorTest
{
public static void main(String[] args)
{
Calculator calculator=new Calculator();
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
calculator.setVisible(true);
}
}
class Calculator extends JFrame
{
public Calculator()
{
setBounds(leftX,topY,width,high);
CalculatorPanel onePanel=new CalculatorPanel();
add(onePanel,BorderLayout.CENTER);
pack();
}
private int width=500;
private int high=500;
private int leftX=300;
private int topY=200;
}
class CalculatorPanel extends JPanel
{
public CalculatorPanel()
{
setLayout(new BorderLayout());
add(display,BorderLayout.NORTH) ;
lastCommand="=";
start=true;
/*display=new JButton("0");
display.setEnabled(false);
add(display,BorderLayout.NORTH);*/
ActionListener insert=new ActionInsert();
ActionListener command=new ActionCommand();
panelB.setLayout(new GridLayout(4,5));
addButton("7",insert);
addButton("8",insert);
addButton("9",insert);
addButton("/",command);
addButton("sqrt",command);
addButton("4",insert);
addButton("5",insert);
addButton("6",insert);
addButton("*",command);
addButton("%",command);
addButton("1",insert);
addButton("2",insert);
addButton("3",insert);
addButton("-",command);
addButton("1/x",command);
addButton("0",insert);
addButton("+/-",command);
addButton(".",insert);
addButton("+",command);
addButton("=",command);
add(panelB,BorderLayout.CENTER);
}
public void addButton(String name,ActionListener listener)
{
JButton buttonOne=new JButton(name);
buttonOne.addActionListener(listener);
panelB.add(buttonOne);
}
class ActionInsert implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String command=e.getActionCommand();
if(start)
{
display.setText(""); //换屏!!!!!
start=false;
}
display.setText(display.getText()+command);//显示操作的数字 ,这里的false恰好与下面的
//判断值相同,使得既可以显示,有可以计算
}
}
class ActionCommand implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String command=e.getActionCommand();
getTextResult=Double.parseDouble(display.getText()); //得到所操作的数字
if(start)
{
}
else //false值与上面对应
{
if(command.equals("+"))
result+=getTextResult; //X 代表按钮得到的数字display.getText(),按完运算符后希望换屏,
//怎样做到?
else if(command.equals("-"))
result-=getTextResult;
else if(command.equals("*"))
result*=getTextResult;
else if(command.equals("/"))
result/=getTextResult;
else if(command.equals("="))
result=0.000000000;
display.setText(""+result);
start=true;
}
}
}
private JPanel panelB=new JPanel();
private String lastCommand;
private boolean start;
private JButton display=new JButton();
private double result=0;
private double getTextResult=0;
} 这是我自己实现的,但不足之处 = 号还没实现出来。仅供参考,呵呵。