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

最佳答案

定义函数mouseAdd(...)后,我看不到您在调用它。

试试(在构造函数内)

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


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

请注意,还有其他问题


您没有在JFrame类的main函数中调用正确显示main的方法。查找有关Java Swing的基础教程,其中讨论了事件分配线程和程序主执行线程中不存在的要求。
您在main类中还有一个附加的viewOne函数,这不是如何连接这些东西的。

关于java - 无法实现鼠标监听器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48306272/

10-09 07:10