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);
}
}