Java:如何将两个事件放在同一个方法中

标签 java

我在尝试使用同一方法获取 mousePressed() 鼠标事件和 Java Paint() 图形时遇到问题(我已尝试尽可能简化代码 [Java 7+])。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.Math.*;

public class JFrameClick extends JFrame implements MouseListener {
    public static void main(String args[]) {
    //Main method in here
    }

    public void paint(Graphics g){
    //handle Java 2 graphics 
    }

    public void mousePressed(MouseEvent e) {
    //Handle mouse press
    }

//Other methods here

}

每次执行 mousePressed() 方法时,我将如何让绘制函数触发。我在这里尝试了这段代码,但它不起作用。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.Math.*;

public class JFrameClick extends JFrame implements MouseListener {
   public static void main(String args[]) {
   //Main method in here
   }

   public void paint(Graphics g, MouseEvent e){
   mousePressed(e);
   //handle Java 2 graphics
   }

   public void mousePressed(MouseEvent e) {
   //Handle mouse press
   }

//Other methods here

}

//This doesn't work vice versa either

谢谢。

最佳答案

要请求 Swing 重新绘制您的小部件,您可以使用 repaint() 方法,如下所示:

public void mousePressed(MouseEvent e) {
    // do other stuff

    repaint();
}

Swing 将尽快调用您的 paint 方法。

不建议在任何其他时间进行绘制(除了 Swing 调用 paint 方法时),包括您自己调用 paint 时,这通常会导致图形故障。

您尝试的解决方案告诉我,您对方法没有很好的理解,但这超出了这个问题的范围。

关于Java:如何将两个事件放在同一个方法中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27791854/

相关文章:

java - 向 Glassfish 服务器添加过滤器

java - 如何缩放 Android TableLayout

java - 强制关闭后 SharedPreferences 被重置

java - 如何在 JUNIT 测试中使用 assertEquals 或任何其他方式比较两个对象?

java - JPA 可在 Eclipse 上运行,但不能在 JAR 上运行

java - Java 中的国际化自动换行

java - 未创建 SQLite 数据库文件

javac 提示 : cannot find symbol on enum implementing interface

java - java中synchronized(expr){}中expr的意义

java - Spring boot graphql 在类路径上找不到 graphql 模式文件