Загрузка данных


import javax.swing.*;
import java.awt.*;
import java.util.Random;

public class RunningLine extends JPanel implements Runnable {
    private String text = "Бегущая строка на Java! ";
    private int x = 0;
    private int y = 100;
    private int dx = 3; // скорость и направление движения
    private Color color = Color.BLACK;
    private Random random = new Random();
    private Thread thread;
    private boolean running = true;

    public RunningLine() {
        setBackground(Color.WHITE);
        setPreferredSize(new Dimension(800, 200));
        thread = new Thread(this);
        thread.start();
    }

    @Override
    public void run() {
        while (running) {
            // Движение строки
            x += dx;

            // Проверка границ и отражение
            FontMetrics fm = getFontMetrics(getFont());
            int textWidth = fm.stringWidth(text);

            if (x + textWidth >= getWidth() || x <= 0) {
                dx = -dx;
                // Смена цвета при отражении
                color = new Color(random.nextInt(256),
                                  random.nextInt(256),
                                  random.nextInt(256));
            }

            repaint();

            try {
                Thread.sleep(30); // задержка для плавности
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                break;
            }
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                             RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setFont(new Font("Arial", Font.BOLD, 36));
        g2d.setColor(color);
        g2d.drawString(text, x, y);
    }

    public void stopRunning() {
        running = false;
        thread.interrupt();
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Бегущая строка");
        RunningLine panel = new RunningLine();
        frame.add(panel);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}