java - 如何在 JFrame 中的其他内容下面添加鼠标监听器?

标签 java jframe jpanel mouselistener

如果我的问题听起来很愚蠢,我很抱歉,我对java还是个新手。我将向您展示这段代码:

public class Window extends JFrame{


    private static final long serialVersionUID = -2139430787087799923L;

    private TransparentJPanel mousepanel;

    public Window(int width, int height, String title, Game game) {
        super(title);   
        HandlerClass handler = new HandlerClass();
        mousepanel = new TransparentJPanel();
        mousepanel.addMouseListener(handler);

        setPreferredSize(new Dimension(width,height));
        setMaximumSize(new Dimension(width,height));
        setMinimumSize(new Dimension(width,height));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(false);

        setVisible(true);
        add(game);      <-- here I add the game
        add(mousepanel);    <-- here I add the panel with the mouselistener
        game.start();
    }
}

TransparentJPanel 类:

private class TransparentJPanel extends JPanel {
    private static final long serialVersionUID = 8855609189172945035L;

    TransparentJPanel() {
        super() ;
        this.setOpaque( false ) ;
        this.setLayout( null ) ;
    }
}

当我首先添加游戏时,游戏会显示,并且鼠标监听器不起作用,但是当我首先添加 jpanel 时,游戏不会显示,但鼠标监听器起作用。 这是我的 HandlerClass 类:

private class HandlerClass implements MouseListener {
    public void mouseClicked(MouseEvent event) {
        System.out.println(String.format("Clicked at %d,%d", event.getX(), event.getY()));
    }

    public void mouseEntered(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        System.out.println("Mouse Entered frame at X: " + x + " - Y: " + y);

    }
    public void mouseExited(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        System.out.println("Mouse Exited frame at X: " + x + " - Y: " + y);

    }
    public void mousePressed(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        System.out.println("Mouse Pressed frame at X: " + x + " - Y: " + y);

    }

    public void mouseReleased(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        System.out.println("Mouse Released at X: " + x + " - Y: " + y);

    }

}

所以,这就是我的问题。 请帮忙。

最佳答案

结果证明解决方案很简单!

您可以向游戏对象添加鼠标监听器,而不是为鼠标监听器创建面板,如下

public Window(int width, int title, String title, Game game) {
    super(title);
    HandlerClass handler = new HandlerClass();

    setPreferredSize(new Dimension(width,height));
    setMaximumSize(new Dimension(width,height));
    setMinimumSize(new Dimension(width,height));
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setResizable(false);

    setVisible(true);
    add(game, BorderLayout.CENTER);
    game.addMouseListener(handler);     
    game.start();
}

希望这有帮助!

关于java - 如何在 JFrame 中的其他内容下面添加鼠标监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43165049/

相关文章:

java - 如何使文本字段在按钮单击时可见?

java - 为什么图像不显示?

java - JPanel 内的 JPanel 过多(使用 GridBagLayout)

Java 控制台独立吗?

java - java JFrame 错误

java - 如何在 Java 中使用 KeyPressed

Java - 用于验证字符串是否为 StatsD 格式的正则表达式

java - 如何为JSF配置web.xml、glassfish-web.xml文件?

java - 是否可以创建一个在运行时反射(reflect)类的 List<class> ?

java - 将 SQL 查询存储在简单的日志文件中