Newsgroup: it.comp.java
Titolo: Newbie ed ereditarietà!

Ciao ragazzi, sono un newbie e volevo esercitarmi provando ad
estendere la classe JTextArea, per far si che vada a capo
automaticamente quando arriva al limite della casella...
Ma il problema non è questo... quando faccio partire una finestra con
una casella di testo per vedere se funziona la classe che ho appena
creato non mi visualizza nulla all'interno della casella di testo...
Ora vi riporto il listato della mia classe e di quella che uso per
testare:
==============================================
package caselladitesto;
import javax.swing.JTextArea;
import java.util.StringTokenizer;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */
public class Casella extends JTextArea{
  public JTextArea testo;
  public Casella() {
    testo= new JTextArea();
  }
  public Casella(int rows, int columns)
  {
    testo = new JTextArea(rows,columns);
  }
  public void setText(String parole)
  {
    StringTokenizer tokenizer = new StringTokenizer(parole);
    String stringa = "";
    String next="";
    String verifica="";
    testo.setText("prova prova");
    while(tokenizer.hasMoreTokens())
    {
      System.out.println("Vediamo come vado in loop");
      next = tokenizer.nextToken();
      verifica = stringa.concat(" ");
      verifica = verifica.concat(next);
      if(verifica.length() > testo.getColumns())
      {
        System.out.println("Sono dentro l'if");
        this.testo.append("\n");
        this.testo.append(verifica);
        stringa = "";
        next ="";
      }
      else
      {
        stringa = verifica;
      }
    }
  }
}
====================================================
package caselladitesto;
import java.awt.*;
import javax.swing.*;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */
public class Dialog1 extends JDialog {
  JPanel panel1 = new JPanel();
  BorderLayout borderLayout1 = new BorderLayout();
  Casella jTextArea1 = new Casella(10,10);
  public Dialog1(Frame frame, String title, boolean modal) {
    super(frame, title, modal);
    try {
      jbInit();
      pack();
      show();
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
  }
  public Dialog1() {
    this(null, "", false);
  }
  private void jbInit() throws Exception {
    panel1.setLayout(borderLayout1);
    jTextArea1.setPreferredSize(new Dimension(100, 100));
    jTextArea1.setText("uno due tre prova");
    getContentPane().add(panel1);
    panel1.add(jTextArea1, BorderLayout.CENTER);
    jTextArea1.testo.setText("nemmeno alla fine me lo fa vedere");
  }
  public static void main(String[] args)
  {
    new Dialog1();
  }
}
Grazie mille dell'attenzione!:D

Perche' derivi da JTextArea e poi all' interno della classe chichiari
una variabile di tipo JTextArea?
public class Casella extends JTextArea{
 
   public JTextArea testo;
.
.
ti conviene derivare direttamente da JTextArea e malipolarne poi il
funzionamento.
Ti riporto la mia versione ,e' molto spartana ma dovrebbe permetterti
di andare avanti con le prove.
Tieni presente che la classe cosi formatta il testo solo quando chiami
setText()
e non si accorge del input da tastiera per il quale devi "ridefinire"
e "registrare" delle appostite classi x la gestione degli eventi.
public class Casella extends JTextArea{
  // richiama il costruttore della classe superiore
  public Casella()
  {
    super();
  }
  // richiama il costruttore della classe superiore
  public Casella(int rows, int columns)
  {
    super( rows,columns);
  }
  public void setText(String parole)
  {
    StringTokenizer tokenizer = new StringTokenizer(parole);
    String next=null;
    String AppoString="";
    while(tokenizer.hasMoreTokens())
    {
      next = tokenizer.nextToken();
      if((AppoString.length()   + next.length() ) < super.getColumns()
)
      {
        AppoString = AppoString + next + " ";
      }
      else
      {
        this.append(AppoString + "\n");
        AppoString = next+" ";
      }
   }
   this.append(AppoString);
  }
}

Ah, dando una prima occhiata penso di aver capito cosa intendi...
oltre all'esercizio era proprio sbagliato il metodo di affrontarlo...
Come dici tu ha sicuramente più senso... però non riesco a capire come
mai non mi visualizzasse proprio nessuna scritta con il listato che
avevo scritto io!
Grazie mille dell'aiuto!

Ti evidenzio le cose che secondo me possono creare problemi al tuo
programma.
Buon divertimento
package caselladitesto;
public class Casella extends JTextArea{
  public JTextArea testo;
  public Casella() {
    testo= new JTextArea();
  }
  public Casella(int rows, int columns)
  {
    //evitabile
    testo = new JTextArea(rows,columns);
   /*
e' meglio richiamare il costruttore della classe da cui deriviamo per
permettere di inizializzare correttamente tutte le variabili
   super(rows,columns)
*/
  }
  public void setText(String parole)
  {
    StringTokenizer tokenizer = new StringTokenizer(parole);
    String stringa = "";
    String next="";
    String verifica="";
    testo.setText("prova prova");
    while(tokenizer.hasMoreTokens())
    {
      System.out.println("Vediamo come vado in loop");
      next = tokenizer.nextToken();
      verifica = stringa.concat(" ");
      verifica = verifica.concat(next);
      if(verifica.length() > testo.getColumns())
      {
        System.out.println("Sono dentro l'if");
        this.testo.append("\n");
        this.testo.append(verifica);
        stringa = "";
        next ="";
      }
      else
      {
        stringa = verifica;
      }
    } 
  } 
}
package caselladitesto;
import java.awt.*;
import javax.swing.*;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */
public class Dialog1 extends JDialog {
  JPanel panel1 = new JPanel();
  BorderLayout borderLayout1 = new BorderLayout();
 
Casella jTextArea1 = new Casella(10,10);
/*
viene creata casella con 10,10 che verranno impostati per per la
variabile testo che non verra' mai visualizzata
*/
  public Dialog1(Frame frame, String title, boolean modal) {
    super(frame, title, modal);
    try {
      jbInit();
      pack();
      show();
    }
    catch(Exception ex) {
      ex.printStackTrace();
    }
  }
  public Dialog1() {
    this(null, "", false);
  }
  private void jbInit() throws Exception {
    panel1.setLayout(borderLayout1);
    jTextArea1.setPreferredSize(new Dimension(100, 100));
 
 
    jTextArea1.setText("uno due tre prova");
    /*
    in teoria questa istruzione potrebbe funzionare, e il fatto che
non produce nessun effetto "potrebbe" essere dovuto al fatto che nella
classe casella non richiami mai il costruttore della classe "padre" o
che il codice che hai scritto in settext non e' proprio corretto
    */
 
    getContentPane().add(panel1);
 
    panel1.add(jTextArea1, BorderLayout.CENTER);
    /*
    qui aggiungi al panel1 la casella jTextArea1 che e' l'unica che
sara'         visibile
    */
    jTextArea1.testo.setText("nemmeno alla fine me lo fa vedere");
     /*
     questa istruzione non ti serve a nulla xke qui imposti la
proprieta' text della variabile pubblica testo della classe casella
che pero' non verra' mai visualizzata
     */


Grazie mille!