首页 文章

为什么JPanel下的JButton仍然会做出反应?

提问于
浏览
3

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

我有一个JLayeredPane,在那里有2个JPanel . 最深的一个(最下面)有JButton . 第二个(顶部的那个)具有部分透明的背景颜色(虽然我认为这不应该影响它) .

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

为什么会这样?我该怎么办才能让它停下来?

在这里,我将两个面板添加到分层窗格,这指的是扩展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]);
        }
    }

这里指的是最底层的JPanel

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

1 回答

  • 3

    现在,当我将鼠标悬停在我的JButtons(后面是另一个JPanel)上时,它们仍会向我添加到它们的MouseListener发出事件

    当生成需要传递给组件的事件时,Swing会从父/子层次结构的底部搜索到顶部,直到找到想要处理该事件的组件 .

    我该怎么办才能让它停下来?

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

相关问题