E' un po' laborioso, ma si può fare:
codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class textAreaLines extends JFrame implements ComponentListener {
JScrollPane scr;
JTextArea ta = new JTextArea();
public void componentHidden (ComponentEvent ce) {
}
public void componentMoved (ComponentEvent ce) {
}
public void componentResized (ComponentEvent ce) {
System.out.println("COMPONENTE RIDIMENSIONATO\n________________________\n");
System.out.println("La textarea ha: "+ta.getLineCount()+" righe");
try {
for (int i = 0; i < ta.getLineCount(); i++) {
System.out.println("La riga " + i + " contiene " +
(ta.getLineEndOffset(i)-ta.getLineStartOffset(i))+ " caratteri");
System.out.println("Il testo della riga "+i+" è: "+ta.getText(ta.getLineStartOffset(i), ta.getLineEndOffset(i)-ta.getLineStartOffset(i)));
}
}
catch (Exception e) {
System.out.println(e.toString());
}
}
public void componentShown (ComponentEvent ce) {
}
public textAreaLines() {
super("Prova testo");
this.setSize(400, 500);
this.getContentPane().setLayout(new BorderLayout());
scr = new JScrollPane(ta);
ta.setText("Questo è solo un testo di prova, contiene caratteri\ndi acapo e altre amenità varie\n\nQuesto è solo un testo di prova, contiene caratteri di acapo e altre amenità varie\nQuesto\n è solo un testo di prova, contiene caratteri di acapo e altre amenità\n varie");
ta.setLineWrap(true);
ta.setWrapStyleWord(true);
this.getContentPane().add(scr, BorderLayout.CENTER);
this.addComponentListener(this);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
System.out.println("La textarea ha: "+ta.getLineCount()+" righe");
}
public static void main (String[] args) {
textAreaLines tal = new textAreaLines();
}
}
Praticamente c'è una versione di getText che prende un offset all'interno del componente di testo su cui viene applicato e la lunghezza della stringa da andare a recuperare da quell'offset. I metodi per prendere gli offset di inizio e fine riga sono propri di JTextArea.
Ciao.