Java 如何在鼠标悬停时突出显示JPanel?

Java 如何在鼠标悬停时突出显示JPanel?,java,mouseevent,mouseover,Java,Mouseevent,Mouseover,我有16个JPanel,当我将鼠标悬停在它们上面时,我想突出显示它们。我以匿名方式创建了JPanel,然后将它们添加到父级,并为每个子级添加了一个鼠标侦听器。然后我给父母加了一个鼠标听筒。问题是,现在它只是突出显示父对象。我怎样才能解决这个问题 注意:有时JFrame不会显示任何内容-您只需一直运行它,直到它显示为止(通常需要2-3次尝试)。如果在超过5次尝试后仍不起作用,请发表评论 HighlightJPanels(创建JFrame、容器和子对象,并添加鼠标侦听器) HighlightJPan

我有16个JPanel,当我将鼠标悬停在它们上面时,我想突出显示它们。我以匿名方式创建了JPanel,然后将它们添加到父级,并为每个子级添加了一个鼠标侦听器。然后我给父母加了一个鼠标听筒。问题是,现在它只是突出显示父对象。我怎样才能解决这个问题

注意:有时JFrame不会显示任何内容-您只需一直运行它,直到它显示为止(通常需要2-3次尝试)。如果在超过5次尝试后仍不起作用,请发表评论

HighlightJPanels(创建JFrame、容器和子对象,并添加鼠标侦听器)

HighlightJPanelsContainerMouseListener(创建将添加到容器中的鼠标侦听器)


问题是由于您如何在这一行中找到要突出显示的
JPanel

Component comp = HighlightJPanels.container.findComponentAt(HighlightJPanelsContainerMouseListener.eX, HighlightJPanelsContainerMouseListener.eY);
幸运的是,已经有一个函数可以满足您的需要。您只需在事件上使用
getSource()
,它就会告诉您要突出显示哪个面板。因此,将函数更改为:

public void mouseEntered(MouseEvent e) {
    JPanel parent = (JPanel)e.getSource();
    parent.setBorder(grayBorder);
    parent.revalidate();
}

使用
mouseExited
执行同样的操作,您将看到它高亮显示正确的面板。这将消除对
HighlightJPanelsContainerMouseListener

的需要。问题是由您如何在这一行中找到要突出显示的
JPanel
引起的:

Component comp = HighlightJPanels.container.findComponentAt(HighlightJPanelsContainerMouseListener.eX, HighlightJPanelsContainerMouseListener.eY);
幸运的是,已经有一个函数可以满足您的需要。您只需在事件上使用
getSource()
,它就会告诉您要突出显示哪个面板。因此,将函数更改为:

public void mouseEntered(MouseEvent e) {
    JPanel parent = (JPanel)e.getSource();
    parent.setBorder(grayBorder);
    parent.revalidate();
}

使用
mouseExited
执行同样的操作,您将看到它高亮显示正确的面板。这将消除对HighlightJPanelsContainerMouseListener的需求,我建议在MouseMotionListener上使用MouseListener,并实现我在HighlightJPanelsChildMouseListener中使用的方法,但是如果我在HighlightJPanelsContainerMouseListener中这样做,那么它只会突出显示父对象。我建议在MouseMotionListener上使用MouseListener,并实现方法
MouseEntered
MouseExited
@ControlAltDel我在HighlightJPanelsChildMouseListener中这样做过,但如果我在HighlightJPanelsContainerMouseListener中这样做,那么它只会突出显示父对象。
public void mouseEntered(MouseEvent e) {
    JPanel parent = (JPanel)e.getSource();
    parent.setBorder(grayBorder);
    parent.revalidate();
}