Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法实现鼠标侦听器_Java_Oop_Mouselistener - Fatal编程技术网

Java 无法实现鼠标侦听器

Java 无法实现鼠标侦听器,java,oop,mouselistener,Java,Oop,Mouselistener,我试图实现鼠标侦听器,但我似乎无法让它工作。我的代码没有任何错误,但当我点击框架时,我无法得到要打印的消息。我曾尝试将HandleClassOne类扩展到viewOne,但这也行不通。有什么想法吗 main类创建一个框架,然后在该框架上创建viewOne的实例 public class main{ protected static JFrame window; public static void main(String args[]){ window = new JFram

我试图实现鼠标侦听器,但我似乎无法让它工作。我的代码没有任何错误,但当我点击框架时,我无法得到要打印的消息。我曾尝试将HandleClassOne类扩展到viewOne,但这也行不通。有什么想法吗

main类创建一个框架,然后在该框架上创建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(…)
,但我没有看到您调用它

Try(在构造函数中)

当然,您需要在设置
面板1
后执行此操作

请注意,还有其他问题

  • 您没有在
    main
    类中的
    main
    函数中正确调用呈现
    JFrame
    。查阅关于JavaSwing的基本教程,其中讨论了事件调度线程以及不在程序主执行线程中出现的要求
  • 您的
    viewOne
    类中还有一个额外的
    main
    函数,这不是这些东西的连接方式
  • 您在viewOne类的主方法中添加了mouseAdd()方法(负责注册鼠标侦听器)

    请记住,main方法只有在作为应用程序的入口点类运行时才会被调用。这里有一个作为入口点的主类

    您还将main方法保留在viewOne类中,并且只有当您将其作为一个单独的部分(而不是与main类一起)运行时,才会调用它

    要解决此问题,请将mouseAdd()方法调用保留在viewOne()构造函数中,因为每次创建对象时都会调用构造函数

     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();
      }
    
     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();
      }