我将以下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
答案 0 :(得分:2)
ActionListener
位于java.awt.event
包中。如果您导入该包,它应该可以工作。
import java.awt.*;
语句不会导入java.awt.event
类所在的ActionListener
包。要导入,您需要单独`import java.awt.event。*;'
查看here以获取更多详细信息,包括'包的显式层次结构'。
答案 1 :(得分:2)
以下代码正常运行,以下是我所做的:
import java.awt.event.*;
import java.util.*;
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);
}
}
答案 2 :(得分:1)
没有包的层次结构。
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抽象窗口 Toolkit)用于制作许多相关的包 关系明显,但不表示包容。
导入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.*;`
(Source)