首先,我作为网站程序员来到Java.在JavaScript中,您只需调用addEventListener函数即可添加mousemove,mouseover或click事件.根据我对Java的有限经验,您不能只从任何对象实现MouseListener接口.

基本上,到目前为止我所拥有的是一个JPanel,它绘制了一些具有x / y / width / height值的形状(带有绘制方法的CustomShape对象).我想在形状对象中添加一些类型的鼠标监听器,这样我就可以触发形状的移动/滚动/点击事件.只是将CustomLhaner接口实现到CustomShape对象不起作用(我认为这是显而易见的原因).我已经查找了如何设计自定义事件监听器,但似乎并不是可以创建自定义鼠标监听器.

我最终使用鼠标监听器添加到JPanel,然后循环遍历所有形状对象.如果形状对象附加了“侦听器”,并且鼠标坐标已验证鼠标事件已发生,则会触发该方法.最初,它很好,但随着应用程序越来越发达,它开始变得非常混乱.另外,如果不复制一堆代码,我将永远无法将形状对象/接口复制到另一个应用程序.

作为一个简单的说明:(实际代码非常大)

Interface CustomShape{

int width, height, x, y;

void paint(Graphics g);

}

public class StarShape implements CustomShape{

int width, height, x, y;

public StarShape(){

width = 100;

height = 100;

x = 50;

y = 50;

}

void paint(Graphics g){

g.setColor(Color.black);

g.draw(new Rectangle(x,y,width,height));

}

}

public class Main extends JPanel{

StarShape check = new StarShape();

public Main(){ }

@Override

public void paintComponent(Graphics g){

super.paintComponent(g);

check.paint(g);

}

}

所以,我想知道是否有一种干净的方式来实现某种类型的鼠标监听器的“手绘”形状.

解决方法:

我做你想做的事情的方法.编译,运行,阅读:-)

(注意:您可以将下面的每一行代码复制到单个文件Example01.java中.编译并运行它.)

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Example01 {

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

JFrame jf = new JFrame();

MainPanel mainPanel = new MainPanel();

jf.add(mainPanel);

jf.setSize(640, 480);

jf.setLocationRelativeTo(null);

jf.setVisible(true);

}

});

}

}

class MainPanel extends JPanel {

StarShape check1 = new StarShape();

StarShape check2 = new StarShape();

public MainPanel() {

check1.setName("check1");

check2.setName("check2");

check1.addMouseListener(new MyMouseListener(check1));

check2.addMouseListener(new MyMouseListener(check2));

this.add(check1);

this.add(check2);

}

}

class StarShape extends JComponent {

public StarShape() {

this.setPreferredSize(new Dimension(100, 100));

}

@Override

protected void paintComponent(Graphics g) {

g.setColor(Color.black);

Graphics2D g2d = (Graphics2D) g;

int x = 0;

int y = 0;

int width = this.getWidth() - 1;

int height = this.getHeight() - 1;

g2d.draw(new Rectangle(x, y, width, height));

}

}

class MyMouseListener implements MouseListener {

private final JComponent component;

public MyMouseListener(JComponent component) {

this.component = component;

}

public void mouseClicked(MouseEvent e) {

System.out.println("mouseClicked: " + component.getName());

}

public void mouseEntered(MouseEvent e) {

System.out.println("mouseEntered: " + component.getName());

Dimension preferredSize = component.getPreferredSize();

preferredSize.height += 20;

preferredSize.width += 20;

component.setPreferredSize(preferredSize);

component.invalidate();

SwingUtilities.getWindowAncestor(component).validate();

}

public void mouseExited(MouseEvent e) {

System.out.println("mouseExited: " + component.getName());

Dimension preferredSize = component.getPreferredSize();

preferredSize.height -= 20;

preferredSize.width -= 20;

component.setPreferredSize(preferredSize);

component.invalidate();

SwingUtilities.getWindowAncestor(component).validate();

}

public void mousePressed(MouseEvent e) {

System.out.println("mousePressed: " + component.getName());

}

public void mouseReleased(MouseEvent e) {

System.out.println("mouseReleased: " + component.getName());

}

}

标签:java,swing,mouse-listeners

来源: https://codeday.me/bug/20190610/1212371.html

java监听鼠标接口实现_自定义Java鼠标监听器?相关推荐

  1. java监听变量的变化_[Java学习小记]使用PropertyChangeSupport来监听变量的变化

    最近开始要着手写一个web项目 ,之前没怎么 写过Java ,所以觉得蛮有必要把每天学习到的一些知识点或者解决的一些问题给记录下来 .一来供自己在整理过程中掌握巩固,二来也为以后再次出现该问题时能快速 ...

  2. java 监听map的数据_使用监听器:定时清除map缓存的key value .

    使用监听器:定时清除map缓存的key value . 配置web.xml:注意位置 com.my.common.listener.TimerListener 监听类: public class Ti ...

  3. java 监听多个按键_如何在所有组件中监听按键(在Java Swing中)?

    很简单我的朋友: 你所要做的就是创造一个 class KeyEventDispatcher并注册到KeyboardFocusManager C.1 然后解析并提取状态和密钥信息,参见:C.2 奇怪的是 ...

  4. java 监听鼠标点击_java 事件监听 - 鼠标

    java 事件监听 - 鼠标 //事件监听 //鼠标事件监听 //鼠标事件监听有两个实现接口 //1.MouseListener 普通的鼠标操作 //2.MouseMotionListener 鼠标的 ...

  5. java监听数据库操作_第十六篇——JDBC操作数据库之监听器

    JavaWeb应用中,很多的地方都和session有关.因此session相关的事件监听器,在日常工作中非常有用. 有时候我们需要统计当前在线的人数和访问人数总数,此时就可以使用监听器技术来很简单的实 ...

  6. java监听设计模式(java观察者设计模式)

    今天给大家分享一下观察者设计模式(监听设计模式),该模式在很多主流得框架.源码中使用率非常高.在分享之前先给大家讲一个我们使用手机的一个场景,我们都用过手机,当我们手机来电话的时候,会有各种复杂的操作 ...

  7. Java监听mysql的binlog详解(mysql-binlog-connector)

    Java监听mysql的binlog详解(mysql-binlog-connector) 1. 需求概述 2. 技术选型 3. 方案设计 3.环境准备 3.1 查看是否开启binlog 3.2 mys ...

  8. java swing列表数据加监听,【Java Swing公开课|Java监听列表项选择事件怎么用,看完这篇文章你一定就会了】- 环球网校...

    [摘要]作为一门面向对象编程语言,Java吸收了C++语言的优点,也展现了其强大的一面,我们能在各个地方看到其功能强大和简单易用的两个特征,当然,也吸引了很多程序员的注意力,所以就有人想了解Java的 ...

  9. java 监听控制台输入

    分享一下我写的java监听控制台输入并可以给出响应的功能. 很多时候需要监听控制台的输入内容,相当于信号监听,根据输入的内容做出相应的动作,这里给出我的一个简单实现. 要注意的是:监听得到的消息中前后 ...

最新文章

  1. ArcGIS API for javascript开发笔记(五)——GP服务调用之GP模型的发布及使用详解...
  2. VMware NAT模式设置静态IP(可上网)
  3. linux7 vi 末行 快捷键,vi 常用操作快捷键
  4. Http代理抓包 Fiddler与Charles
  5. Unity自定义Editor简明教程
  6. 小米6x更换关机音量键记录
  7. T100 ERP 开发说明(一)
  8. 聊聊微信内页面发Ajax请求会重复请求的问题
  9. ABP默认表结构解析
  10. spring boot 上传视频demo
  11. 【图解相对论系列1】怎样直观地理解张量(Tensor)?爱因斯坦广义相对论的数学基础...
  12. 分享一个妄想山海脚本辅助,另附PHP随机数生成器代码
  13. 短视频获客系统另附属源码理论分享
  14. TextClock 24小时制
  15. 别让生气毁了你的生活(深度好文)
  16. mupdf中CMYK与RGB的转换算法
  17. 【oracle】oracle11g 搭建
  18. 完美定制你的QQ,把QQ里不要的文件通通删除!
  19. Java:Java静态多态性与动态多态性
  20. Postgres忘记密码如何修改密码

热门文章

  1. xposed 主动调用方法_操作方法:主动容量管理
  2. sql azure 语法_SQL Server + Azure:混合方案简介
  3. Spring boot+Thymeleaf+easyui集成:js创建组件页面报错
  4. Metasploit Framework(6)客户端渗透(上)
  5. 直接插入_折半插入(python)
  6. 小白的java学习之路 “ 选择结构(一)”
  7. (转) C# Async与Await的使用
  8. 标准C程序设计七---120
  9. 设计模式之原型模式(Prototype)
  10. Socket通信入门小实例