为什么不起作用?使用getMouseClicked没有结果

per*_*ser 0 java swing

这个程序假设创建一个窗口,在其下面有一个状态栏,显示单击鼠标的次数而不在屏幕上移动.当你移动鼠标并单击它时,假设开始一个新的计数.它还区分不同的鼠标按钮.我完全按照我看到的教程来遵循这段代码,但它不起作用.我只是得到一个状态栏永远不会改变的窗口.

public class Adapter_class extends JFrame {

    private String details;
    private JLabel statusBar;
    public Adapter_class() {

        super("Adapter mouse:");

        this.statusBar = new JLabel("Default");
        add(this.statusBar, BorderLayout.SOUTH);

        addMouseListener(new MouseClass());
    }

    private class MouseClass extends MouseAdapter {
        public void MouseClicked (MouseEvent event) {
            details = String.format("You clicked the mouse %d", event.getClickCount());


            //this is for using a mouse from a mac
            if (event.isMetaDown())
            details += " with the right mouse button";
            else if (event.isAltDown())
            details += " with the center mouse button";
            else
            details += " with the left mouse button";

            statusBar.setText(details);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是主要的:

import javax.swing.JFrame;

public class Adapter_main {

    public static void main(String[] args) {

        Adapter_class window = new Adapter_class();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(400, 300);
        window.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

How*_*ard 5

您已MouseClicked使用大写M 编写方法.使用小写版本

public void mouseClicked(MouseEvent event) { ... }
Run Code Online (Sandbox Code Playgroud)

否则,您正在创建一个新方法,而不是覆盖适配器的方法.您可能还希望包含一个@Override注释,它会强制编译器向您显示问题.