【发布时间】:2014-09-08 13:56:51
【问题描述】:
我愿意添加一个移动的文字和图片(从一侧到另一侧并在它走出“窗口”后重复循环)。
目前我正在使用这种结构在我的应用程序中显示菜单:
try
{
repaint = ImageIO.read(new File(ReturnPageName(0)));
}catch (IOException e) {
}
image = new ImageIcon(repaint.getScaledInstance(sizeX,sizeY, Image.SCALE_SMOOTH));
imageLabel.setIcon(image);
revalidate();
repaint();
JLabel 在JFrame 中设置了这样的参数:
imageLabel = new JLabel();
imageLabel.setIcon(image);
imageLabel.setVisible(true);
add(imageLabel);
setUndecorated(true);
setVisible(true);
setSize(sizeX, sizeY);
我想在显示的菜单图片中添加如上所述的移动文本/图片。我怎样才能轻松做到?尝试使用扩展可运行的新类,但没有成功。
编辑:
我做过类似的事情,
绘图菜单:
public void drawPageZero()
{
repaint.setData(repaint0.getData());
Graphics g = repaint.createGraphics();
g.setFont(font);
g.setColor(black);
FontMetrics fm = g.getFontMetrics();
if (xN < - fm.stringWidth(text))
{
xN = 2 * fm.stringWidth(text);
}
if (xN < 0 && xN >= -fm.stringWidth(text))
{
xN2 = xN + fm.stringWidth(text);
xN3 = xN + 2 *fm.stringWidth(text);
}
else if (xN <= 2*fm.stringWidth(text) && xN >= fm.stringWidth(text))
{
xN2 = xN - 2*fm.stringWidth(text);
xN3 = xN - fm.stringWidth(text);
}
else if (xN >= 0 && xN < fm.stringWidth(text))
{
xN2 = xN + fm.stringWidth(text);
xN3 = xN - fm.stringWidth(text);
}
g.drawString(text,xN,66);
g.drawString(text,xN2,66);
g.drawString(text,xN3,66);
image = new ImageIcon(repaint.getScaledInstance(sizeX,sizeY, Image.SCALE_SMOOTH));
imageLabel.setIcon(image);
revalidate();
repaint();
timer = new Timer();
timer.schedule(new infoBar(), 50);
}
计时器看起来像这样:
class infoBar extends TimerTask
{
@Override
public void run() {
if (page ==0) {
xN -= 1;
timer.cancel();
timer.purge();
drawPageZero();
}
else
{
timer.cancel();
timer.purge();
}
}
}
现在的问题是,看着移动的文字会很痛。可能是刷新太慢了,可能是repaint.setData(repaint0.getData());操作造成的。有没有简单快捷的方法将图像从一个BufferedImage 粘贴到另一个?在此之前,我每个周期都在加载图片,但速度也很慢。
【问题讨论】:
-
最简单的实现方法是在您的 JLabel 集上使用 JScrollPane 以从不显示任一滚动条。然后构造一个javax.swing.Timer,在对应的action中调整JScrollPane的滚动条。
-
据我所知。我将创建一个具有所需内容的 JScrollPane 并将其添加到代码的第一部分(在 revalidate() 之前)。然后我将添加一个 Timer 来触发滑动条?
-
是的,你已经掌握了要点。如果遇到问题,请在此处尝试并更新您的代码
-
遇到了另一个问题:P 当我尝试将 JScrollPane 添加到 JLabel 时,但只显示加载到 JLabel 的图片。当我将 JSP 添加到 JFrame 时,只显示了 JSP 的图片。我怎样才能获取由 JLabel 图片制作的背景的 JSP 内容?
-
好吧,我觉得我很愚蠢......为什么我没有想到只是将字符串添加到图片中,这些参数将通过计时器更改并重新验证?有时我智障._.'
标签: java swing text jframe jlabel