我正在尝试实现鼠标监听器但是我似乎无法让它工作。我的代码没有任何错误,但是当我点击框架时,我无法打印出来的消息。我已经尝试将类HandleClassOne扩展到viewOne,但这也行不通。有什么想法吗?
主类创建一个框架,然后在框架上创建一个viewOne实例。
public class main{
protected static JFrame window;
public static void main(String args[]){
window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setSize(400,400);
window.setVisible(true);
new viewOne(window);
}
}
viewOne类将一个面板和一个标签添加到框架中。它还为面板添加了一个鼠标监听器。
public class viewOne {
private static JPanel panel1;
private static JLabel label1;
public viewOne(JFrame frame) {
panel1 = new JPanel();
label1 = new JLabel("View One");
panel1.add(label1);
frame.add(panel1);
panel1.setBackground(Color.red);
frame.validate();
}
public static void mouseAdd() {
HandleClassOne handle = new HandleClassOne();
panel1.addMouseListener(handle);
panel1.addMouseMotionListener(handle);
}
public static void main(String[] args) {
mouseAdd();
}
}
当单击在viewOne中创建的面板时,HandleClassOne类应该打印出一条消息。
public class HandleClassOne extends main implements MouseListener, MouseMotionListener {
public void mouseClicked(MouseEvent e) {
System.out.println("mouse clicked");
}
}
答案 0 :(得分:1)
虽然您已定义了mouseAdd(...)
功能,但我还没有看到您调用它。
尝试(在构造函数内)
public viewOne(JFrame frame) {
...
mouseAdd();
...
}
自然,您需要在设置panel1
后执行此操作。
请注意,还有其他问题
JFrame
课程的main
函数中正确调用main
。查阅Java Swing的基础教程,其中讲述了事件调度线程以及程序执行主线程中不存在的要求。main
课程中还有一个viewOne
功能,这不是这些内容的连接方式。答案 1 :(得分:0)
您在viewOne类的main方法中添加了mouseAdd()方法(负责注册鼠标侦听器)。
请记住,每当您将main方法作为应用程序的入口点类运行时,它才会被调用。在这里,您可以使用主要课程作为切入点。
你在viewOne类中保留了main方法,只有当你将它作为一个单独的部分运行时才会被调用(不是与主类一起)。
要解决此问题,请在viewOne()构造函数中调用mouseAdd()方法,因为每次创建对象时都会调用构造函数。
public viewOne(JFrame frame) {
panel1 = new JPanel();
label1 = new JLabel("View One");
panel1.add(label1);
frame.add(panel1);
panel1.setBackground(Color.red);
mouseAdd();
frame.validate();
}