gpt4 book ai didi

java - 为什么 JPanel 下的 JButton 仍然有反应?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:29 24 4
gpt4 key购买 nike

我四处寻找我的问题,但找不到答案,所以我开始了:

我有一个 JLayeredPane,其中有 2 个 JPanel。最深的(最下面)有 JButtons。第二个(顶部的那个)具有部分透明的背景色(尽管我认为这不会影响它)。

现在,当我将鼠标悬停在我的 JButton(位于另一个 JPanel 后面)上时,它们仍然会向我添加到它们的 MouseListener 触发事件。我不知道为什么...

为什么会这样?我该怎么做才能让它停止?

这里我将两个面板都添加到分层 Pane 中,this 指的是我的扩展 JFrame 的类。

    JLayeredPane layer = this.getLayeredPane();
layer.removeAll();

this.gamePanel = new GamePanel(game);


this.ghostPanel = new GhostPanel();
this.ghostPanel.setOpaque(true);
this.ghostPanel.setVisible(true);

layer.add(this.gamePanel, new Integer(0));
layer.add(this.ghostPanel, new Integer(1));

这里我在最下方的面板上添加了一些按钮(具有绝对布局)

    this.setLayout(null);
for (int j = 0; j < 5; j++) {
for (int i = 0; i < 5 + j; i++) {
this.add(this.buttons[i][j]);
}
}
for (int j = 1; j < 5; j++) {
for (int i = j; i < 9; i++) {
this.add(this.buttons[i][4 + j]);
}
}

这里this指的是最底层的JPanel

这是一个名为 gipf 的游戏,我使用的布局是绝对的,因为很难将所有内容对齐成六边形。

最佳答案

Now when I hover over my JButtons ( which are behind the other JPanel ), they still fire events to the MouseListener I added to them

当一个事件产生需要传递给一个组件时,Swing 会从父/子层次结构的底部向上搜索,直到找到要处理该事件的组件。

What can I do to make it stop?

在顶部面板添加一个 MouseMotionListener 来拦截 mouseEntered/mouseExited 等事件。这样您仍然可以处理其他面板中的按钮点击。

关于java - 为什么 JPanel 下的 JButton 仍然有反应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32893810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com