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.