2 cacaopie cacaopie 于 2015.06.04 22:16 提问

简单的计算器程序,不知道哪错了,求大神指点!
ava

package calculator;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CalculatorPanel {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    EventQueue.invokeLater(new Runnable()
       {
           public void run()
           {
               JFrame frame=new CalculatorPanel();
               frame.setTitle("Calculator");
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
           }
       });
}

}
class CalculatorPanel extends JPanel
{
private JButton display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;

public CalculatorPanel()
{
    setLayout(new BorderLayout());
    result=0;
    lastCommand="=";
    start=true;
    display=new JButton("0");
    display.setEnable(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("=",insert);
    addButton("+",command);

    add(panel,BorderLayout.CENTER);
}
private void addButton(String label,ActionListner 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 
        {
            calculator(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);
}

}
错误提示说CalculatorPanel已经被定义了,为什么啊?怎么改啊?

4个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.06.04 22:23
public class CalculatorPanel {//这里定义了一个CalculatorPanel
/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
 -------------------------------------
 class CalculatorPanel extends JPanel   //这里又定义了一个CalculatorPanel
 这两个有一个改个名字
cacaopie
cacaopie 我又重新建立了个项目,然后把程序复制过去了,可又出来一堆错误,很多很多...改名字我也试了,也一样,很多很多错误瞬间就出来了...
2 年多之前 回复
danielinbiti
danielinbiti 改上面一个容易些,直接改成public class CalculatorPanel1 {,记得文件名也改一下,改成CalculatorPanel1.java
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.06.04 22:24

你没看出来你定义了2个类都叫CalculatorPanel么?将其中一个改名吧。

cacaopie
cacaopie 改了以后突然就出来很多错误...
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.06.04 22:47

具体什么错误。另外,建议你写程序要写一段编译一下,运行一下。看看现有的程序是否正常。
而不是等写完了发现好多错误,甚至很低级的错误才回过头来检查。

cacaopie
cacaopie The method addButton(String, ActionListner) from the type CalculatorPanelIn refers to the missing type ActionListner我把第二个CalculatoePanel改了以后addButton就显示这个错误...
2 年多之前 回复
danielinbiti
danielinbiti   Ds   Rxr 2015.06.04 22:52

给你改了一下,就这么多了,再解释就太基础了

 import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CalculatorPanel {
/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    EventQueue.invokeLater(new Runnable()
       {
           public void run()
           {
               JFrame frame=new CalculatorPanelIn();
               frame.setTitle("Calculator");
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
           }
       });
}
}
class CalculatorPanelIn extends JFrame
{
private JButton display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;
public CalculatorPanelIn()
{
    setLayout(new BorderLayout());
    this.setSize(300,300);
    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("=",insert);
    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);
}
}
danielinbiti
danielinbiti 回复cacaopie: 还有几个错误是你把字母拼错了。如果解决了,别忘了采纳
2 年多之前 回复
cacaopie
cacaopie 好神奇...真的行诶...可你这个不就是把第二个CalculatorPanel改成CalculatorPanelIn,然后加了个 this.setSize(300,300);吗?我是把你这个程序复制过去了,就可以,可改一下我的程序就又不行了...简直了...
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片