求教:如何在JWindow上显示滚动字幕

chenweionline 2005-03-18 10:48:29
我想在软件的About窗口上加一个所有参与开发人员的滚动字幕,类似网页上的滚动新闻。

About 是一个 JWindow,我原来的设想是在 JWindow 上加一个 JEditorPane,滚动字幕用html网页实现,然后将其加入 JEditorPane,现在遇到的问题是网页加入 JEditorPane 后可以显示但是没有滚动效果,单独使用ie打开网页效果正常。

请问有什么解决办法,或者还有什么方式可以实现?

附我使用html完成滚动效果的代码
<html>
<table bgcolor=#FFFFCC font face='Times New Roman'>
<tr>
<td>
<marquee scrollAmount=2 width=300 height=160 direction=up>
<br>Product Team :
<br>Andy Jia
<br>Bill Liou
<br>Edy Li
<br>Godn Zhou
<br>James Yang
<br>Jacky Yang
<br>Leon Chen
<br>Long Wang
<br>Rosalba He
<br>Will Wang
</marquee>
</td>
</tr>
</table>
</html>
...全文
239 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
捏造的信仰 2005-03-18
  • 打赏
  • 举报
回复
marquee是IE专用的,html中好像还没有标准的滚动字幕的标签。
用个线程算了,不麻烦。
华生豆 2005-03-18
  • 打赏
  • 举报
回复
笨辦法,用timer設定定時,設定不同時間字幕的不同位置~~~
OnlyFor_love 2005-03-18
  • 打赏
  • 举报
回复
你可以参考一下上面这个程序!

以上程序运行正常
OnlyFor_love 2005-03-18
  • 打赏
  • 举报
回复
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.image.*;

public class ScrollText extends JComponent
{
private BufferedImage image;
private Dimension imageSize;
private volatile int currOffset;

private Thread internalThread;
private volatile boolean noStopRequested;

public ScrollText(String text)
{
currOffset=0;
buildImage(text);

this.setMinimumSize(imageSize);
this.setPreferredSize(imageSize);
this.setMaximumSize(imageSize);
this.setSize(imageSize);

noStopRequested=true;
Runnable r=new Runnable()
{
public void run()
{
try
{
runWork();
}
catch(Exception e)
{
e.printStackTrace();
}
}
};

internalThread=new Thread(r,"ScrollText");
internalThread.start();
}

private void buildImage(String text)
{
//请求绘制时,打开反锯齿,并运用高质量选项
RenderingHints renderHints=new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
renderHints.put(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);

//创建一幅临时图像,用于判断文件的大小
BufferedImage scratchImage=new BufferedImage(1,1,BufferedImage.TYPE_INT_RGB);

Graphics2D scratchG2=scratchImage.createGraphics();
scratchG2.setRenderingHints(renderHints);

Font font=new Font("Serif",Font.BOLD|Font.ITALIC,24);

FontRenderContext frc=scratchG2.getFontRenderContext();
TextLayout t1=new TextLayout(text,font,frc);
Rectangle2D textBounds=t1.getBounds();
int textWidth=(int)Math.ceil(textBounds.getWidth());
int textHeight=(int)Math.ceil(textBounds.getHeight());
int horizontalPad=10;
int verticalPad=6;

imageSize=new Dimension(textWidth+horizontalPad,textHeight+verticalPad);

//创建适当大小的图像
image=new BufferedImage(imageSize.width,imageSize.height,BufferedImage.TYPE_INT_RGB);

Graphics2D g2=image.createGraphics();
g2.setRenderingHints(renderHints);

int baselineOffset=(verticalPad/2)-((int)textBounds.getY());

g2.setColor(Color.white);
g2.fillRect(0,0,imageSize.width,imageSize.height);

g2.setColor(Color.blue);
t1.draw(g2,0,baselineOffset);

//立即释放资源,但保持动画显示图像
scratchG2.dispose();
scratchImage.flush();
g2.dispose();
}

public void paint(Graphics g)
{
//不论当前大小,确保裁减边缘
g.setClip(0,0,imageSize.width,imageSize.height);

int localOffset=currOffset; //以防改变
g.drawImage(image,-localOffset,0,this);
g.drawImage(image,imageSize.width-localOffset,0,this);

//绘制轮廓
g.setColor(Color.black);
g.drawRect(0,0,imageSize.width-1,imageSize.height-1);
}

private void runWork()
{
while(noStopRequested)
{
try
{
Thread.sleep(100); //每秒10帧

//调整滚动位置
currOffset=(currOffset+1)%imageSize.width;

//通知事件线程调用paint()
repaint();
}
catch(InterruptedException e)
{
Thread.currentThread().interrupt();
}
}
}

public void stopRequest()
{
noStopRequested=false;
internalThread.interrupt();
}

public boolean isAlive()
{
return internalThread.isAlive();
}

public static void main(String args[])
{
ScrollText st=new ScrollText("Java can do animation!");
JPanel p=new JPanel(new FlowLayout());
p.add(st);

JFrame f=new JFrame("ScrollText Demo");
f.setContentPane(p);
f.setSize(400,100);
f.setVisible(true);
}
}
DanielYWoo 2005-03-18
  • 打赏
  • 举报
回复
JTextPane只对部分HTML支持,连CSS,JavaScript都不能正确显示
你自己弄个Timer控制吧
sysmaster 2005-03-18
  • 打赏
  • 举报
回复
效果以前用VB实现过,也是用定时器实现的
jFresH_MaN 2005-03-18
  • 打赏
  • 举报
回复
一般就是用一个线程来控制显示一个Label

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧