【问题标题】:Why did I get an error?为什么我收到错误消息?
【发布时间】:2014-07-10 21:11:32
【问题描述】:

我正在尝试用 Java 制作计算器。在了解了 ActionListeners 之后,我尝试将 ActionListener 添加到按钮中,但是在我这样做并尝试编译文件之后,我得到了一个错误。我的代码如下。

import javax.swing.*;//import the packages needed for gui
import java.awt.*;
public class Window {
public static void main(String[] args) {
    JFrame Window = new JFrame("Window");//makes a JFrame
    Window.setSize(300,350);
    Window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel Panel = new JPanel (new FlowLayout());//makes the panel, textfield and buttons
    JTextField TextField = new JTextField(20);
    JButton openbracket = new JButton("(");
    JButton closebracket = new JButton(")");
    JButton clearbutton = new JButton("C");
    JButton arcsin = new JButton("arcsin");
    JButton arccos = new JButton("arccos");
    JButton arctan = new JButton("arctan");
    JButton sin = new JButton("sin");
    JButton cos = new JButton("cos");
    JButton tan = new JButton("tan");
    JButton log = new JButton("log");
    JButton seven = new JButton("7");
    JButton eight = new JButton("8");
    JButton nine = new JButton("9");
    JButton four = new JButton("4");
    JButton five = new JButton("5");
    JButton six = new JButton("6");
    JButton one = new JButton("1");
    JButton two = new JButton("2");
    JButton three = new JButton("3");
    JButton zero = new JButton("0");
    JButton radixpoint = new JButton(".");
    JButton equal = new JButton("=");
    String values = null;
    public class Listener implements ActionListener {
    public void actionPerformed(ActionEvent e) {          
        values = values+"3";
        TextField.setText(values);
    }
    Panel.add(TextField);//adding all the things
    Window.add(Panel);
    Panel.add(openbracket);
    Panel.add(closebracket);
    Panel.add(clearbutton);
    Panel.add(arcsin);
    Panel.add(arccos);
    Panel.add(arctan);
    Panel.add(sin);
    Panel.add(cos);
    Panel.add(tan);
    Panel.add(log);
    Panel.add(nine);
    Panel.add(eight);
    Panel.add(seven);
    Panel.add(six);
    Panel.add(five);
    Panel.add(four);
    three.addActionListener(Listener);
    Panel.add(three);
    Panel.add(two);
    Panel.add(one);
    Panel.add(zero);
    Panel.add(radixpoint);
    Panel.add(equal);
    Window.setVisible(true);
}
}

我得到的错误是:

Window.java:33:表达式的非法开始 公共类监听器实现 ActionListener { ^ Window.java:38:预期 Panel.add(TextField);//添加所有的东西 ^ Window.java:38:预期 Panel.add(TextField);//添加所有的东西 ^ Window.java:39:预期 Window.add(面板); ^ Window.java:39:预期 Window.add(面板); ^ Window.java:40:预期 Panel.add(openbracket); ^ Window.java:40:预期 Panel.add(openbracket); ^ Window.java:41:预期 Panel.add(closebracket); ^ Window.java:41:预期 Panel.add(closebracket); ^ Window.java:42:预期 Panel.add(clearbutton); ^ Window.java:42:预期 Panel.add(clearbutton); ^ Window.java:43:预期 Panel.add(arcsin); ^ Window.java:43:预期 Panel.add(arcsin); ^ Window.java:44:预期 面板.add(arccos); ^ Window.java:44:预期 面板.add(arccos); ^ Window.java:45:预期 Panel.add(arctan); ^ Window.java:45:预期 Panel.add(arctan); ^ Window.java:46:预期 Panel.add(sin); ^ Window.java:46:预期 Panel.add(sin); ^ Window.java:47:预期 面板.add(cos); ^ Window.java:47:预期 面板.add(cos); ^ Window.java:48:预期 面板.add(tan); ^ Window.java:48:预期 面板.add(tan); ^ Window.java:49:预期 面板.add(log); ^ Window.java:49:预期 面板.add(log); ^ Window.java:50:预期 Panel.add(九); ^ Window.java:50:预期 Panel.add(九); ^ Window.java:51:预期 Panel.add(八); ^ Window.java:51:预期 Panel.add(八); ^ Window.java:52:预期 Panel.add(七); ^ Window.java:52:预期 Panel.add(七); ^ Window.java:53:预期 Panel.add(六); ^ Window.java:53:预期 Panel.add(六); ^ Window.java:54:预期 Panel.add(五); ^ Window.java:54:预期 Panel.add(五); ^ Window.java:55:预期 Panel.add(四); ^ Window.java:55:预期 Panel.add(四); ^ Window.java:56:预期 三.addActionListener(Listener); ^ Window.java:56:预期 三.addActionListener(Listener); ^ Window.java:57:预期 Panel.add(三); ^ Window.java:57:预期 Panel.add(三); ^ Window.java:58:预期 Panel.add(二); ^ Window.java:58:预期 Panel.add(二); ^ Window.java:59:预期 Panel.add(one); ^ Window.java:59:预期 Panel.add(one); ^ Window.java:60:预期 Panel.add(零); ^ Window.java:60:预期 Panel.add(零); ^ Window.java:61:预期 Panel.add(radixpoint); ^ Window.java:61:预期 Panel.add(radixpoint); ^ Window.java:62:预期 Panel.add(等于); ^ Window.java:62:预期 Panel.add(等于); ^ Window.java:63:预期 Window.setVisible(true); ^ Window.java:63:类型的非法开始 Window.setVisible(true); ^ Window.java:65:解析时到达文件末尾 } ^ 为什么我会收到这些错误?请解释原因。

【问题讨论】:

  • 您的类和 Jframe 变量具有相同的名称。这可能会破坏事情。此外,您需要将 Listener 类的实例添加到按钮,而不是类本身。
  • 你绝对应该放下GUI,先学习基础知识。从简单的控制台程序开始。你可以start from the beginning here

标签: java swing compiler-errors calculator


【解决方案1】:

您不能在一个 java 文件中声明多个公共类。

如果这是我的程序,我会使用私有内部类或匿名内部类,创建一个实例并将其添加到按钮中。

例如,

ActionListener numberButtonListener = new ActionListener() {
  public void actionPerformed(ActionEvent e) {
     //  TODO: put some code here
  }
};

// assuming a List<AbstractButton> of the number buttons
for (AbstractButton numberButton : numberButtonList) {
  numberButton.addActionListener(numberButtonListener);
} 

对于您未来的问题,您需要改进代码缩进,使其更易于阅读和理解。


还有

根据评论,此代码:

public class Window {
public static void main(String[] args) {
    JFrame Window = new JFrame("Window");//makes a JFrame

你的类名和变量名是一样的。这不好,可能会使您和编译器感到困惑。变量名也应该以小写字母开头。此外,您将希望将大部分代码从静态 main 方法中移出,并进入它所属的面向对象领域。您将需要阅读一本体面的 OOP 和 Java 介绍书,例如“Thinking in Java”。事情的顺序应该是:1)首先学习基本 Java,然后 2)学习 Java 中的子专业主题,例如 Swing,或数据库,或 ...

【讨论】:

    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 2022-01-21
    • 2014-04-12
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    相关资源
    最近更新 更多