Newsgroup: it.comp.java
Titolo: java Japplet

Ragazzi non ci sto a capire niente. Ho sviluppato molti programmi in
java, ma con le applets non ho avuto molto a che fare. Mi spiegate un
po come e la storia dei threads nelle applets? Io ho un piccolo
programmino che dovrebbe visualizzare ogni secondo una scritta
diversa. Le diverse String vengono prese da un String[]. Purtroppo
quello che succede e che solo la prima stringa viene visualizzata. Il
codice e cosi:
public class First extends JApplet implements Runnable{
    private JPanel panel;
    private Text te; 
    private Thread tr;
    private int count=0;
    private String[] arr = new String[5];
     public void init(){
        arr[0]="Ciao Linus";
        arr[1]="Hola Linus";
        arr[2]="Salut Linus";
        arr[3]="Hello Linus";
        arr[4]="Hallo Linus";
        tr=new Thread(this);
        tr.start();
    }//init
 public void run(){
        while(true){
            if(count==5)
                count=0;
            ty = new Text(arr[count++]); 
                this.getContentPane().add(te,"Center");  
                   try{Thread.sleep(2000);}
                   catch(Exception e){}
        }
    }
}//First
class Text extends JPanel{
    private String text;
    private Font myFont;
    private FontMetrics fm;
    private Dimension dim;
    private int x, y;
 
    public Text(String str){
        super();
 
            this.setSize(350, 200);
            setBackground(new Color(0, 0, 99));
            minFont = new Font("TimesRoman", java.awt.Font.BOLD, 52);
            text = new String(str);
            this.repaint();
 
    }   
    public void paintComponent(Graphics g){
        super.paintComponent(g);     
        g.setColor(new Color(255,255,255));
        g.setFont(myFont);
        fm = g.getFontMetrics(myFont);
        dim = getSize();
        int sWidth = fm.stringWidth(text);
        x = (dim.width/2) - (sWidth/2);
        y = 110; 
        g.drawString(text,x, y);                      
    }//paintComponent
}//Text
Qualcuno vede l'errore?
giggi

diversa.
Veramente il codice dice 2000 millisecondi...
Inoltre ci sono diversi refusi: sei sicuro di averlo almeno compilato?? 8-|
[CUT]
import java.awt.*;
import javax.swing.*;
public class First extends JApplet {
    private JLabel label;
    private String[] arr = new String[] {
        "Ciao Linus", "Hola Linus", "Salut Linus", "Hello Linus", 
        "Hallo Linus"
    };
    public void init() {
        label = new JLabel();
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setOpaque(true);
        label.setBackground(new Color(0, 0, 99));
        label.setFont(new Font("TimesRoman", java.awt.Font.BOLD, 52));
        label.setForeground(Color.WHITE);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(label, BorderLayout.CENTER);
        new Thread() {
            public void run() {
                int count = 0;
                while (true) {
                    label.setText(arr[count]);
                    count = (count + 1) % arr.length;
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {
                    }
                }
            }
        }.start();
    }
}
HTH
-- 
Ciao
	Fabrizio C.

 Inoltre ci sono diversi refusi: sei sicuro di averlo almeno compilato?? 8-|
Cosa intendi con refusi?
Certo, l'ho compilato piu volte. Il problema e che viene visualizzata
solamente la stringa con l'indice 0. A me non sembra ci siano problemi
nell'algoritmo per aumentare l'indice. Il tuo codice funziona bene, ma
io preferirei capire perche ilmio non funziona. Semanticamente
descrivo il codice come segue:
Nel metodo init avvio il Thread con tr.start(); A quel punto entra in
scena il metodo run(). Qui c'é un while(true) fai: text= new
Text(arr[count++]);
Dopodiche: this.getContentPane().add(text,"Center");  
           try{Thread.sleep(1000);}
Da parte sua, la classe Text fa alcune operazioni per manipolare il
testo, e poi, nella stessa classe c'é il metodo paintComponent().
Ecco, il mio problema é questo: cosa é paintComponent? Quando viene
chiamato paintComponent? Non c'é nessuna parte nel codice in cui
questo metodo venga chiamato...Text é una subclass di JPanel, quindi
magari c'é un richiamo automatico a quel metodo quando l'istanziamento
termina? Voi che ne dite?
giggi


 termina? Voi che ne dite?
paintComponent è richiamato automaticamente dal sistema quando quest'ultimo
si "accorge" che un componente va ridisegnato; puoi richiedere un refresh
del componente invocando repaint(); attento,però, al fatto che repaint()
richiede il refresh del componente, ma non si può sapere quando questa
richiesta verrà soddisfatta dalla macchina virtuale java.
Saluti,
  Scorpio.