您可能能够使用Marquee Panel。代码使用真实的组件,因此您应该能够添加并响应您添加到组件的任何侦听器。
编辑:
哎呀,我不知道我在想什么,我的代码使用Graphics.translate(...)方法绘制的组件,以便直接使用的MouseListener将无法正常工作。
编辑2:
也许下面的代码会有所帮助。只需将方法添加到MarqueePanel类:
public Component getComponentAtPoint(Point p)
{
int translatedX = p.x + scrollOffset;
if (isWrap())
{
int preferredWidth = super.getPreferredSize().width;
preferredWidth += getWrapAmount();
translatedX = translatedX % preferredWidth;
}
Point translated = new Point(translatedX, p.y);
for (Component c: getComponents())
{
if (c.getBounds().contains(translated))
return c;
}
return null;
}
现在你可以一个的MouseListener添加到MarqueePanel,然后以确定的MouseEvent是为生成哪个组件调用此方法。一旦你知道哪个组件被点击了,你将手动为该组件调用一个Action。或者您可以尝试将MouseEvent重新分派给组件。您需要重新创建MouseEvent以将组件作为事件的来源,而不是面板作为源。您还需要将事件X/Y位置转换为相对于组件而不是面板的事件。 SwingUtils类应该对此有所帮助。
我deleleted我的帖子missunderstood – mKorbel