fla*_*and 2 java swing jpanel jscrollpane
我需要一些自动循环滚动(字幕文本)它的内容JPanel
.内容必须在鼠标点击不同元素时作出反应.因此,只需绘制移动坐标不能在此处工作的内容,因为元素的实际位置不会改变.它也必须能够更新.最有可能的是它将是平滑更新 - 没有任何弹跳.试图使用JScrollPane
没有可见的滚动和自动滚动,它可以保持动作侦听器,但我不能使它顺利循环和平滑更新内容.
更新它应该是这样的:
http://h1.flashvortex.com/display.php?id=2_1311593920_25605_144_0_700_30_6_1_92
但是从代码修改内容,而不停止动画和弹跳.
您可以使用Marquee面板.代码使用实际组件,因此您应该能够添加并响应添加到组件的任何侦听器.
编辑:
糟糕,我不知道我在想什么,我的代码使用Graphics.translate(...)方法绘制组件,因此直接使用MouseListener将无法正常工作.
EDIT2:
也许以下代码会有所帮助.只需将方法添加到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;
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以将MouseListener添加到MarqueePanel,然后调用此方法以确定为其生成MouseEvent的组件.一旦知道单击了哪个组件,您将手动需要为该组件调用Action.或者您可以尝试将MouseEvent重新分配到组件.您需要重新创建MouseEvent以使组件成为事件的来源,而不是将面板作为源.您还需要将事件X/Y位置转换为相对于组件而不是面板.SwingUtils类应该对此有所帮助.
归档时间: |
|
查看次数: |
1073 次 |
最近记录: |