无法实现鼠标侦听器

时间:2018-01-17 16:56:57

标签: java oop mouselistener

我正在尝试实现鼠标监听器但是我似乎无法让它工作。我的代码没有任何错误,但是当我点击框架时,我无法打印出来的消息。我已经尝试将类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");
  }
}

2 个答案:

答案 0 :(得分:1)

虽然您已定义了mouseAdd(...)功能,但我还没有看到您调用它。

尝试(在构造函数内)

public viewOne(JFrame frame) {
  ...
  mouseAdd();
  ...
}

自然,您需要在设置panel1后执行此操作。

请注意,还有其他问题

  1. 您不能在JFrame课程的main函数中正确调用main。查阅Java Swing的基础教程,其中讲述了事件调度线程以及程序执行主线程中不存在的要求。
  2. 您的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();
  }