繁体   English   中英

基本Java程序错误-找不到符号ActionListener()

[英]Error on basic Java program - cannot find symbol ActionListener()

我拼凑了以下HelloWorld类型的程序,该程序打开一个窗口,显示一个按钮,然后通过关闭窗口来处理按钮单击。 我在添加ActionListener来处理click事件的部分进行编译时遇到错误。 看看网上的其他示例和教程,这似乎应该可以工作。 有任何想法吗?

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

public class MyTest{
public static void main(String args[]) throws Exception {

    JFrame guiFrame = new JFrame("Test Frame");
    guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    guiFrame.setTitle("Example GUI"); 
    guiFrame.setSize(300,250);  
    guiFrame.setLocationRelativeTo(null);  

      JButton btn = new JButton("Hit Me");

      btn.addActionListener( new ActionListener(){
      @Override
      public void actionPerformed(ActionEvent event)
      {
      guiFrame.close();
      }
     });
      guiFrame.add(btn, BorderLayout.SOUTH);
      guiFrame.setVisible(true);

}
}

错误:

javac MyTest.java
MyTest.java:17: error: cannot find symbol
          btn.addActionListener( new actionListener(){
                                     ^
  symbol:   class actionListener
  location: class MyTest
1 error

ActionListenerjava.awt.event包中。 如果您导入该程序包,它将正常工作。

import java.awt.*; 语句不会导入ActionListener类所在的java.awt.event包。 要导入,您将需要单独“导入java.awt.event。*;”。

看看这里的更多详细信息,根据“软件包的表观层次”。

以下代码正在工作,这是我所做的:

  1. 添加import java.awt.event.*;
  2. 删除不必要的import java.util.*;
  3. guiFrame.close()替换了guiFrame.dispose(); 因为没有Frame.close()方法。

这是工作代码。

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

public class MyTest {

    public static void main(String args[]) throws Exception {

        JFrame guiFrame = new JFrame("Test Frame");
        guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiFrame.setTitle("Example GUI");
        guiFrame.setSize(300, 250);
        guiFrame.setLocationRelativeTo(null);

        JButton btn = new JButton("Hit Me");

        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                guiFrame.dispose();
            }
        });
        guiFrame.add(btn, BorderLayout.SOUTH);
        guiFrame.setVisible(true);

    }
}

没有包的层次结构。

java.awt.event不是一个子包java.awt 因此import java.awt.*不会导入的类java.awt.event

最初,程序包看起来是分层的,但不是。 例如,Java API包括java.awt包,java.awt.color包,java.awt.font包以及许多其他以java.awt开头的包。 但是,java.awt.color程序包,java.awt.font程序包和其他java.awt.xxxx程序包未包含在java.awt程序包中。 前缀java.awt(Java抽象窗口工具包)用于许多相关的程序包,以使关系显而易见,但不显示包含关系。

导入java.awt。*会导入java.awt包中的所有类型,但不会导入java.awt.color,java.awt.font或任何其他java.awt.xxxx包。 如果计划使用java.awt.color中的类和其他类型以及java.awt中的类和其他类型,则必须导入两个包及其所有文件:

import java.awt.*;
import java.awt.color.*;`

来源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM