这是我到目前为止得到的,代码大量从这里借来:Java Animate JLabel,所以如果您在那里看到任何不需要的代码,请让我知道。
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.EnumMap;
import javax.swing.*;
@SuppressWarnings("serial")
public class AnimateExample extends JPanel {
private static final int TIMER_DELAY = 20;
private static final String KEY_DOWN = "key down";
public static final int TRANSLATE_SCALE =2;
private static final Font BG_STRING_FONT = new Font(Font.SANS_SERIF,
Font.BOLD, 32);
private EnumMap<Direction, Boolean> dirMap =
new EnumMap<AnimateExample.Direction, Boolean>(Direction.class);
private BufferedImage image = null;
private int posX = 100;
private int posY = 50;
Timer t;
public AnimateExample() {
for (Direction dir : Direction.values()) {
dirMap.put(dir, Boolean.TRUE);
}
t = new Timer(TIMER_DELAY, new TimerListener());
t.start();
ActionMap actionMap = getActionMap();
for (final Direction dir : Direction.values()) {
actionMap.put(dir.Left + KEY_DOWN, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
dirMap.put(dir, true);
}
});
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g.setFont(BG_STRING_FONT);
g.setColor(Color.LIGHT_GRAY);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
String s = "Hi, I'm trying to make a news ticker type thing where a string is entered and inside of a JPanel the text is looped.I know it moves currently at about 90 pixels a second and that there is about 16 pixels per char in this font. So what I am asking is how I can use this information to make it so that after a timer runs for a certain time, a new animated text is spawned, and how after the 1st animated text leaves the screen completely, how to delete it from the memory.";
g.drawString(s, posX, posY);
}
private class TimerListener implements ActionListener {
public void actionPerformed(java.awt.event.ActionEvent e) {
for (Direction dir : Direction.values()) {
if (dirMap.get(dir)) {
posX += dir.getX() * TRANSLATE_SCALE;
posY += dir.getY() * TRANSLATE_SCALE;
}
}
repaint();
if(posX<-500)
{
t.stop();
}
};
}
enum Direction {
Left( KeyEvent.VK_LEFT, -1, 0);
private int keyCode;
private int x;
private int y;
private Direction(int keyCode, int x, int y) {
this.keyCode = keyCode;
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
private static void createAndShowGui() {
AnimateExample mainPanel = new AnimateExample();
JFrame frame = new JFrame("Animate Example");
frame.setUndecorated(true);
frame.setSize(1600, 900);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.add(mainPanel);
mainPanel.setBounds(new Rectangle(1600,400));
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
编辑:我也在考虑也许在一定的时间或距离后重置X位置,但问题是这将要求该区域在一个屏幕长度内是空白的。如果你有一个工作周围,这也将是伟大的。
你可以看看选框面板。它使用了与大多数滚动器不同的方法。您将实际的组件添加到面板和组件滚动。
这允许您滚动文本或图像。您可以使用标签与HTML这样您可以有彩色文本等消息将继续滚动,直到您手动停止滚动。
目前还没有自动替换滚动消息的机制。尽管您可以轻松地创建消息列表或队列。然后,当一条消息完全完成滚动时,您只需删除当前消息并添加一条新消息。
public void actionPerformed(ActionEvent ae)
{
scrollOffset = scrollOffset + scrollAmount;
int width = super.getPreferredSize().width;
if (scrollOffset > width)
{
scrollOffset = isWrap() ? wrapOffset + scrollAmount : - getSize().width;
// add code here to swap component from the List or Queue
}
repaint();
}
问题内容: 我写了这段代码,将图像加载到ImageView小部件中: 现在,我要加载多个图像。为此,我需要动态创建图像视图,但是我不知道如何… 我想在for循环中运行我的代码: 我的主要问题是在循环内动态创建多个ImageView 问题答案: 您可以根据需要修改布局,图像资源和任何图像(也可以是动态的)…
问题内容: 在c ++或c编程语言中,我们知道要使用gotoxy(x,y)来更改坐标,并且可以使用循环和睡眠来更改坐标并制作动画。像这样; 但是我的问题是在JAVAFX 2.0编程中如何?我正在使用netbeans 7.2。感谢您的帮助。 问题答案: 看一下使用时间轴动画。它是JavaFX中动画的关键组成部分, 用于确定动画的关键部分何时以及以什么顺序出现。 这是一个例子
关于 Flash 图形 Flash (SWF) 文件格式是一种基于矢量的图形文件格式,它用于适合 Web 的可缩放小尺寸图形。由于这种文件格式基于矢量,因此,图稿可以在任何分辨率下保持其图像品质,并且非常适于创建动画帧。在 Illustrator 中,可以在图层上创建单独的动画帧,然后将图像图层导出到网站上使用的单独帧中。也可以在 Illustrator 文件中定义符号以减小动画的大小。在导出后,
问题内容: 在ViewController.Swift中,我设法使一个盒子从一个点动画到另一个点。我认为将其循环很容易,因此框将动画到一个点,然后再动画回到其原始位置,然后再次循环。我已经设法将对象移到某个位置,并在“完成”后再次将其移回,但这并没有使我循环。如何做到这一点? 我以为这也许行得通,但老实说我不知道: 如何根据设备宽度居中(我假设涉及数学运算?)? 我的代码: 问题答案: 无需执
我试图在一个循环中的两个上播放动画,其中ImageViews的图像在每个循环中都发生变化,但正如预期的那样,用户只看到最后一个图像和动画。 在其他文章中,我尝试了和等方法,但都没有成功。 该程序的目的是让用户选择9张照片,然后根据照片的RGB构图与计算机图像进行岩石-纸-剪刀式的格斗。 程序从两个数组列表中获取ImageViews的照片,是drawable文件夹中文件名字符串的数组列表,以及是的数
关于 Flash 图形 Flash (SWF) 文件格式是一种基于矢量的图形文件格式,它用于适合 Web 的可缩放小尺寸图形。由于这种文件格式基于矢量,因此,图稿可以在任何分辨率下保持其图像品质,并且非常适于创建动画帧。在 Illustrator 中,可以在图层上创建单独的动画帧,然后将图像图层导出到网站上使用的单独帧中。也可以在 Illustrator 文件中定义符号以减小动画的大小。在导出后,