我已经做出来的程序如下,就是把那个外表布局给弄了一下,可是接下来不会让计算器算数,我找了好多的资料都没有结果,也许是自己太笨了吧,如1+2=3这样一个计算都还无法实现,请大虾们给一个提示(如1+2=3怎么实现)就好了.35分全压上
import java.awt.*;
class First
{
public static void main(String args[]){
Frame f=new Frame("小小马哥的计算器");
TextField text=new TextField("在这里进行计算",20);
Panel mpanel=new Panel();
f.setLayout(new BorderLayout()); //定义Frame的布局为BorderLayout;
f.add(text,BorderLayout.NORTH); //将text添加在Frame的上方
f.add(mpanel,BorderLayout.CENTER); //将panel添加到Frame的下方
Button buttons[]=new Button[21]; //定义21个按钮
buttons[0]=new Button("1");
buttons[1]=new Button("2");
buttons[2]=new Button("3");
buttons[3]=new Button("0");
buttons[4]=new Button("c");
buttons[5]=new Button("back");
buttons[6]=new Button("=");
buttons[7]=new Button("4");
buttons[8]=new Button("5");
buttons[9]=new Button("6");
buttons[10]=new Button("sin");
buttons[11]=new Button("cos");
buttons[12]=new Button("tan");
buttons[13]=new Button("cot");
buttons[14]=new Button("7");
buttons[15]=new Button("8");
buttons[16]=new Button("9");
buttons[17]=new Button("+");
buttons[18]=new Button("-");
buttons[19]=new Button("*");
buttons[20]=new Button("/");
mpanel.setLayout(new GridLayout(3,7,5,5)); //定义panel的布局为GridLayout
for(int i=0;i<buttons.length;i++)
{
mpanel.add(buttons[i]); //将button们添加到panel上去
buttons[i].setBackground(Color.yellow);//设置button们的颜色
}
mpanel.setBackground(Color.black); //设置panel的背景颜色
f.setSize(350,200);
f.setVisible(true);
}
}
import java.awt.*;
class First
{
public static void main(String args[]){
Frame f=new Frame("小小马哥的计算器");
TextField text=new TextField("在这里进行计算",20);
Panel mpanel=new Panel();
f.setLayout(new BorderLayout()); //定义Frame的布局为BorderLayout;
f.add(text,BorderLayout.NORTH); //将text添加在Frame的上方
f.add(mpanel,BorderLayout.CENTER); //将panel添加到Frame的下方
Button buttons[]=new Button[21]; //定义21个按钮
buttons[0]=new Button("1");
buttons[1]=new Button("2");
buttons[2]=new Button("3");
buttons[3]=new Button("0");
buttons[4]=new Button("c");
buttons[5]=new Button("back");
buttons[6]=new Button("=");
buttons[7]=new Button("4");
buttons[8]=new Button("5");
buttons[9]=new Button("6");
buttons[10]=new Button("sin");
buttons[11]=new Button("cos");
buttons[12]=new Button("tan");
buttons[13]=new Button("cot");
buttons[14]=new Button("7");
buttons[15]=new Button("8");
buttons[16]=new Button("9");
buttons[17]=new Button("+");
buttons[18]=new Button("-");
buttons[19]=new Button("*");
buttons[20]=new Button("/");
mpanel.setLayout(new GridLayout(3,7,5,5)); //定义panel的布局为GridLayout
for(int i=0;i<buttons.length;i++)
{
mpanel.add(buttons[i]); //将button们添加到panel上去
buttons[i].setBackground(Color.yellow);//设置button们的颜色
}
mpanel.setBackground(Color.black); //设置panel的背景颜色
f.setSize(350,200);
f.setVisible(true);
}
}
2)按非零的数时,如果s=="0,s=对应的数字,否则s+=对应的数字,并对结果窗口刷新:(数字监听器的功能)
注:处理之前要先判断下是否已经按了运算符:是,把窗口数赋给第一个操作数。
3)按运算符时,记录所按运算符op(定义一个char记录):(运算符监听器的功能)
4)按等号时,根据op将窗口数与第一个操作数进行相应运算,用结果对结果窗口刷新,并把结果赋给第一个操作数(这是为了连算):(等号监听器的功能)
5)三角函数那些就是直接用对应的Math函数计算了,用结果对结果窗口刷新,并将结果赋给第一个操作数。
import java.awt.event.*;
import javax.swing.*;public class Calculator
{
public static void main(String[] args)
{
CalculatorFrame frame = new CalculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}class CalculatorFrame extends JFrame
{
public CalculatorFrame()
{
setTitle("Calculator");
CalculatorPanel panel = new CalculatorPanel();
add(panel);
pack();
}
}class CalculatorPanel extends JPanel
{
public CalculatorPanel()
{
setLayout(new BorderLayout()); result = 0;
lastCommand = "=";
start = true;
display = new JButton("0");
display.setEnabled(false);
add(display, BorderLayout.NORTH);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction(); panel = new JPanel();
panel.setLayout(new GridLayout(4, 4)); addButton("7", insert);
addButton("8", insert);
addButton("9", insert);
addButton("/", command); addButton("4", insert);
addButton("5", insert);
addButton("6", insert);
addButton("*", command); addButton("1", insert);
addButton("2", insert);
addButton("3", insert);
addButton("-", command); addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("+", command); add(panel, BorderLayout.CENTER);
} private void addButton(String label, ActionListener listener)
{
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
} private class InsertAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String input = event.getActionCommand();
if (start)
{
display.setText("");
start = false;
}
display.setText(display.getText() + input);
}
} private class CommandAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String command = event.getActionCommand(); if (start)
{
if (command.equals("-"))
{
display.setText(command);
start = false;
}
else
lastCommand = command;
}
else
{
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
} public void calculate(double x)
{
if (lastCommand.equals("+")) result += x;
else if (lastCommand.equals("-")) result -= x;
else if (lastCommand.equals("*")) result *= x;
else if (lastCommand.equals("/")) result /= x;
else if (lastCommand.equals("=")) result = x;
display.setText("" + result);
}
private JButton display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;
}
import java.awt.event.*;public class calculator implements ActionListener,WindowListener {
private Frame f; //计算器窗口容器
private TextField result; //文本框。
private float Num1, Num2, NumR; //Num1用于保存第一个值,Num2用于保存第二个值, NumR保存结果的值。
private char sign; //sign用于保存运算符号。 public static void main(String args[]) { //主函数main。
calculator cal = new calculator();
cal.go();
} void go() { //go()方法,用于启动计算器。
f = new Frame();
f.setLayout(new BorderLayout(5,5));
result = new TextField("0", 20);
result.setEditable(false);
f.add(result, "North");
Panel p = new Panel();
Panel p2 =new Panel();
p.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5));
p.add(mybutton("C"));
p.add(mybutton("="));
p2.setLayout(new GridLayout(5,4,4,5));
p2.add(mybutton("7"));
p2.add(mybutton("8"));
p2.add(mybutton("9"));
p2.add(mybutton("*"));
p2.add(mybutton("4"));
p2.add(mybutton("5"));
p2.add(mybutton("6"));
p2.add(mybutton("/"));
p2.add(mybutton("1"));
p2.add(mybutton("2"));
p2.add(mybutton("3"));
p2.add(mybutton("+"));
p2.add(mybutton("0"));
p2.add(mybutton("+/-"));
p2.add(mybutton("."));
p2.add(mybutton("-")); f.add(p,"Center");
f.add(p2, "South");
f.addWindowListener(this); //给窗体加上一个关闭事件
f.setSize(180,220);
f.setResizable(false); //自由调节窗体大小为false。
f.setVisible(true);
} public Button mybutton(String s) { //动态建立一个按钮和动态加入事件。
Button TempButton=new Button(s);
TempButton.addActionListener(this); //加入行动事件
return TempButton;
} public void actionPerformed(ActionEvent e) {
String input = e.getActionCommand();
String str = "0123456789.";
String op = "+-*/"; if (str.indexOf(input) >= 0 ) { //当单击的按钮是数字按钮时进行下面处理
if (result.getText().equals("0")) //如果显示值中已经是0,如果再次输入的是零,则不处理。
result.setText(input);
else {
if (NumR == 0) //判定留在文本框中的值不为运算结果值。
result.setText(result.getText().trim() + input);
else {
NumR = 0;
result.setText("" + input);
}
} }else if (op.indexOf(input) >= 0) { //当单击的按钮是运算符按钮时进行下面处理。
Num1 = Float.parseFloat(result.getText().trim());
result.setText("");
sign = op.charAt(op.indexOf(input)); //得到相应的运算符
//op.charAt(n)返回在op字符串中的第n个位置的值。
//op.indexOf(input)返回字符input在op中出现的位置,位置值为整型,并且值从0开始
}
else if (input.equals("=")) { //当单击的按钮是是=号时,进行运算。
Num2 = Float.parseFloat(result.getText().trim());
switch (sign) {
case '+': {
NumR = Num1 + Num2;
result.setText("" + NumR);
break;
}
case '-': {
NumR = Num1 - Num2;
result.setText("" + NumR);
break;
}
case '*': {
NumR = Num1 * Num2;
result.setText("" + NumR);
break;
}
case '/': {
if (Num2 != 0) { //当Num2不等于0的时候,才进行运算。
NumR = Num1 / Num2;
result.setText("" + NumR);
}
else
result.setText("Error");
break;
}
default:;
}
}
else if (input.equals("+/-"))
{ boolean isNumber = true;
String s = result.getText();
for (int i = 0; i < s.length(); i++)
if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' ||
s.charAt(i) == '-'))
{
isNumber = false;
break;
}
if (isNumber == true)
{
//判断输入的数的符号 +.
if (s.charAt(0) == '-')
{
result.setText("");
for (int i = 1; i < s.length(); i++)
{
char a = s.charAt(i);
result.setText(result.getText() + a);
}
}
//
else
result.setText('-' + s); }
}
if (input.equals("C")) { //当单击的按钮是C号时,初始化计算器。
Num1 = 0;
Num2 = 0;
NumR = 0;
sign = ' ';
result.setText("0");
}
}
public void windowClosing(WindowEvent e) { System.exit(-1); }
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}
这个也不多 小数处理有点问题
leonmorose() ( ) 信誉:100 Blog 的:
C:\Documents and Settings\songchengzhi\桌面>java Calculator
Exception in thread "main" java.lang.Error: Do not use CalculatorFrame.add() use
CalculatorFrame.getContentPane().add() instead
at javax.swing.JFrame.createRootPaneException(JFrame.java:465)
at javax.swing.JFrame.addImpl(JFrame.java:491)
at java.awt.Container.add(Container.java:307)
at CalculatorFrame.<init>(Calculator.java:21)
at Calculator.main(Calculator.java:9)ily11(隐╃为者) ( ) 信誉:100 Blog 的:
C:\Documents and Settings\songchengzhi\桌面>java Calculator
Exception in thread "main" java.lang.NoClassDefFoundError: Calculator (wrong nam
e: calculator)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
为什么啊