Я хочу добавить движущийся текст и изображения (с одной стороны на другую и после того, как он выходит из «окон», чтобы повторить цикл).Добавление движущегося текста в JLabel
В настоящее время я использую такую конструкцию, чтобы отобразить меню в моем приложении:
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);
Я хочу добавить к отображаемому меню изображение движущегося текста/изображений, как указано выше. Как я могу это сделать? Пробовал работать с новым классом, но он не увенчался успехом.
EDIT:
Я сделал что-то вроде этого,
меню Рисунок:
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
в другое? До этого я загружал изображение каждый цикл, но он тоже был медленным.
простой способ сделать это, чтобы использовать JScrollPane на вашем JLabel набор никогда не показывают ни скроллбар. Затем создайте javax.swing.Timer и настройте полосы прокрутки JScrollPane в соответствующем действии. – ControlAltDel
Итак, из того, что я понял. Я создам JScrollPane с нужным содержимым и добавлю его в первую часть кода (до revalidate()). Затем я добавлю таймер, который приведет к сдвигу бара? –
Да, у тебя есть суть. Попробуйте это и обновите свой код здесь, если у вас есть проблемы – ControlAltDel