Ho visto il codice e c'erano 3 o 4 errori. Questo è il codice funzionante, anche se non è certo il massimo dell'efficienza:
codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Scorriwords extends JFrame implements Runnable{
	int x=300,y=300;
	Thread runner;
	
	Scorriwords(){
		super("ScorriWords v.1.0 - Keratox");
		setBounds(20,10,700,500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel pan = new JPanel();
		setContentPane(pan);
		
		if(runner==null){
			runner= new Thread(this);
			runner.start();
		}
	}
	
	public void run(){
		while(true){
			y--;
                        try {
                           Thread.sleep(50);
                        } catch (Exception e) {}
                        repaint();
		}
	}
	
	public void paint(Graphics g){
		Graphics2D g2 = (Graphics2D)g;
                g2.setColor(SystemColor.control);
                g2.fillRect(0, 0, getWidth()-1, getHeight()-1);
                g2.setColor(Color.black);
		g2.drawString("Word", x,y);
	}
	
	public static void main(String[] args){
	      Scorriwords sw = new Scorriwords();
	      sw.show();
	}
	
	
}
1) non puoi richiamare repaint() in un contesto statico, dato che è un metodo non statico

2) Crei un nuovo thread runner che non fa assolutamente niente. Se vuoi utilizzare il frame (Runnable) come thread devi dire a runner di usarlo.

3) Devi dire al frame di ridisegnarsi ogni volta che diminuisci y, altrimenti lui non richiama il metodo paint()

4) Usa il metodo paint() e non paintComponent() poichè l'ultimo viene richiamato una sola volta alla creazione.

5) Aggiungi un intervallo fra un decremento di y e l'altro altrimenti non so se si fa in tempo a vedere la parola scorrere.


Ciao.