如何向框架添加鼠标监听器

2024-01-04

我想向 mt JFrame 框架添加一个 mouselistener,但是当我执行 frame.addMouseListener(this) 时,我收到一个错误,指出我无法在静态方法中使用它

我正在制作一个应用程序,检测鼠标的单击,然后以 int clicks 的形式显示它

code

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class numberOfClicks implements MouseListener{

    static int clicks = 0;

    @Override
    public void mouseClicked(MouseEvent e) {
        clicks++;
    }

    static JTextField text = new JTextField();
    static String string = clicks+" Clicks";

    static JFrame frame = new JFrame("Click Counter");
    public static void frame(){
        Font f = new Font("Engravers MT", Font.BOLD, 23);
        text.setEditable(false);
        text.setBackground(Color.BLUE);
        text.setFont(f);
        text.setForeground(Color.GREEN);
        text.setBorder(BorderFactory.createLineBorder(Color.BLUE));
        text.setText(string);

        frame.add(text, BorderLayout.SOUTH);
        frame.setResizable(false);
        frame.setSize(300, 300);
        frame.getContentPane().setBackground(Color.BLUE);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.addMouseListener(this);
    }

    public static void main(String[] args){
        frame();
    }

    @Override
    public void mousePressed(MouseEvent e) {}
    @Override
    public void mouseEntered(MouseEvent e) {}
    @Override
    public void mouseExited(MouseEvent e) {}
    @Override
    public void mouseReleased(MouseEvent e) {}
}

this不存在于静态方法中,因为静态方法是类的方法,而不是对象的方法(对象的所有者)this)。解决方案:删除上面代码中的所有静态数据。除了 main 方法之外,上面的任何字段或方法都不应是静态的。


Edit
正如 Andrew Thompson 正确指出的那样,将 MouseListener 添加到 JPanel,然后再添加到 JFrame 的 contentPane。


Edit 2

  • 您将需要学习和使用 Java 命名约定。类名(即NumberOfClicks) 应以大写字母开头。方法和变量名称采用小写字母。
  • 你最好使用mousePressed(...)方法而不是mouseClicked(...)因为前者在接受媒体采访时不那么挑剔。
  • 您还需要在您的 JTextField 中设置文本mousePressed(...)方法,因为仅更改点击值不足以更改显示。
  • 我尽量避免让我的 GUI(或“视图”)类实现我的侦听器。我更喜欢尽可能使用匿名内部类或独立类。

e.g.,

  JPanel mainPanel = new JPanel();
  mainPanel.addMouseListener(new MouseAdapter() {
     @Override
     public void mousePressed(MouseEvent e) {
        clicks++;
        text.setText(clicks + " Clicks");
     }
  });
  // add mainPanel to the JFrame...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何向框架添加鼠标监听器 的相关文章

随机推荐

  • 是否有可能/如何获取特定 Facebook 群组成员的数量(即使数量超过 500 人)?

    我需要监控 Facebook 群组用户的数量并将其显示在网站上 我知道可以使用他们的 API 获取用户 ID 但仅限 500 个 如果会员总数超过 500 人 获取注册我建立的 Facebook 群组的成员总数的最简单方法是什么 这是可能吗
  • teamcity错误MSB4057:项目中不存在目标“pack”

    无法使用 4 7 框架为 Dot Net Core 项目创建包 我正在 teamcity 中使用 msbuild t pack p COnfiguration Release 命令来创建包
  • 从 JSON 类别中获取数据

    我正在编写一个应用程序 我在其中从 JSON 中获取数据 我能够获取类别列表但每当我点击任何类别时未获取产品列表始终在该特定类别下获取空白活动 JSON categoryId 1 categoryTitle SmartPhones Smar
  • User.IsInRole 返回 false

    我正在使用 Identity 2 在 mvc 5 网站中进行身份验证 在我看来 我想检查用户的角色 if User IsInRole Customers do something 但这总是返回 false 我已经设置了
  • 带有 Facebook 评论的自定义滚动条

    The goal 我想在窗口加载时运行滚动条脸书评论 容器 问题 滚动条工作得很好 但我必须resize屏幕强制其调用 场景 I made jsFiddle 上的示例 http jsfiddle net vDUyU 看一下 说明当前的情况
  • 用 C 生成所有元组 - 比嵌套循环更好的方法?

    我有一个数组double x 长度为 11 的函数f double x 我想找到函数的最小值f 通过离散化 所以对于给定的值val1 val2 valn我需要一个循环遍历 val 1 val n 11 中 x 的所有元组 我可以轻松地使用
  • C++ 概念占位符类型推导

    在范围规范中N4622 http www open std org jtc1 sc22 wg21 docs papers 2016 n4622 pdf the Same概念被定义为两种类型T and U 但有时在内部使用requires只有
  • 无法从 START_ARRAY 令牌中反序列化 java.util.HashMap 的实例

    我在使用 jackson core 2 7 3 jar 解析 JSON 时遇到问题 你可以从这里得到它们http repo1 maven org maven2 com fasterxml jackson core http repo1 ma
  • 在 C++11 中实现元函数 zip

    我实际上想看看是否可以获得一个最小的库 该库支持我从 boost fusion 使用的极少数操作 这是我到目前为止所拥有的 template lt typename Types gt struct typelist template lt
  • 是什么导致Spring在使用AnnotationConfigApplicationContext时无法加载配置类?

    我最近遇到了这个问题 在搜索 stackoverflow 网站后 找不到可行的解决方案 我收到的错误是 Spring 在加载配置类时遇到问题 我使用注释和 Spring 类来配置 而不是 XML 文件 以练习使用注释而不是 XML 文件配置
  • 是否可以强制使用 DataType 作为 DataType.Currency 的 MVC3 字段的货币

    我正在编写一个 MVC3 应用程序 它从数据库中读取一堆货币数据 我遇到的问题是这些金额都是不同的货币 如果我像这样设置字段的类型 DataType DataType Currency public Amount get set 我得到小数
  • 添加使用向上和向下箭头键选择表格行的功能

    我需要专家的帮助来解决我的以下问题 因为它超出并远远超出了我对 JavaScript 编程的知识水平 鉴于下面现有的 JavaScript 编码 我如何搭载并添加到现有编码中 以便为用户添加功能 以便在滚动时使用向上和向下箭头键滚动表格 顺
  • 我无法使用 libusb for Ruby 模拟嗅探 urb 中断

    嗅探 URB INTERRUPtions 我嗅探了一些应用程序 SoundLab 和设备 带 USB 的声波计 之间的通信 我找到了一个负责返回当前状态的数据包 USB URB Source host Destination 1 1 2 U
  • 包主要版本更改是否意味着子包主要版本更改?

    假设我有一个核心 CMS 已从v4 8 7 to v5 0 0 我还有一个事件模块包 有自己的版本号1 2 4它将这个核心 CMS 包导入到它的composer json file company name cms 4 3 我将这个包上的c
  • Tesseract 混淆两个数字

    我正在编写一个应用程序来扫描图像中的数字 这些数字使用 OCR B 字体 并且还可能包含 and gt 人物 这是我的源图像 即使将字符集限制为上述字符 使用 Tesseract 的扫描效果也不是很好 由于我没有找到 Tesseract 的
  • Visual Studio 不会调试到引用的 DLL(来自同一解决方案)

    我有一个 Visual studio 2008 解决方案 有 2 个项目 一个 DLL A 一个 Web 应用程序 B B 有一个对 A 的项目引用 并且 A dll 和 A pdb 正在被复制到 B 的 bin 目录中 一切都设置为在调试
  • 文件夹外的文件夹路径

    我的主文件夹中有一个包含所有 css 的文件夹 名为 main 在 main 中 我有另一个名为 math 的文件夹 我想在 math 文件夹中使用我的CSS 但是当我输入 在 math 文件夹的index html 上它可以工作 我认为这
  • 无法在 Codeigniter 中加载请求的类 Session

    我的图书馆在autoload php is autoload libraries array database pagination session cart form validation 我收到此错误 An Error Was Enco
  • Kotlin 注解 IntDef

    我有这个代码示例 class MeasureTextView TextView constructor context Context super context constructor context Context attrs Attr
  • 如何向框架添加鼠标监听器

    我想向 mt JFrame 框架添加一个 mouselistener 但是当我执行 frame addMouseListener this 时 我收到一个错误 指出我无法在静态方法中使用它 我正在制作一个应用程序 检测鼠标的单击 然后以 i