2011-12-16 13 views
6

Voglio stampare stringhe in JTextArea e allinearle correttamente. È difficile da spiegare, quindi caricherò la schermata di ciò che sto cercando di ottenere.Allinea stringhe in colonne in JTextArea

Screen shot of what I have got so far

Così stringhe stampate a ogni linea vengono stampati da un oggetto di carta che ha parametri (id, titolo, autore, data, rango). I dati vengono letti da un file di testo e sono memorizzati in una lista collegata utilizzando la funzione loadPaper().

Quindi la funzione displayPapers() viene utilizzata per visualizzare il contenuto dell'oggetto Paper su JTextArea. displayPapers() sono elencati di seguito:

/** Print all Paper object present in the LinkedList paperList to textArea */ 
public void displayPapers(){ 
    // clear textArea before displaying new content 
    displayTxtArea.setText(""); 

    Paper currentPaper; 
    ListIterator<Paper> iter = paperList.listIterator(); 

    while(iter.hasNext()){ 
     currentPaper = iter.next(); 
     String line = currentPaper.toString(); 

     if("".equals(line)){ 
      continue; 
     } // end if 

     String[] words = line.split(","); 
     displayTxtArea.append (" " 
           + padString(words[0],30) 
           + padString(words[1],30) 
           + " " 
           + padString(words[2],30) 
           + " " 
           + padString(words[3],30) 
           + padString(words[4],30) 
           + "\n"); 

     System.out.println(words); 
     //displayTxtArea.append(currentPaper.toString()); 
    } // end while 

    displayTxtArea.append(" Total " + noOfPapers + " entries!"); 

} // end showAllPaper 

La funzione padString() aggiunge spazi per la stringa in modo che tutti hanno lo stesso numero di parole. PadString() è elencato di seguito:

/** Add spaces to Strings so that all of the are of same number of characters 
* @param str String to be padded 
* @param n total number words String should be padded to 
* @return str Padded string 
*/ 
private String padString(String str, int n){ 
    if(str.length() < n){ 
     for(int j = str.length(); j < n; j++){ 
      str += " "; 
     } // end for 
    } // end if 
    return str; 
} // end padString 

Ho lavorato su questo per un po ', ma ancora non posso ottenere la soluzione. Come puoi notare l'immagine sopra, non tutto è perfettamente allineato come previsto.

Come allinearli perfettamente in modo che appaia più bello? Grazie.

+3

Perché non si utilizza un JTable? Sembra più appropriato visualizzare i dati in colonne. –

+1

Preferirei optare per un JTable che ti dia la flessibilità di giocare con le dimensioni e la posizione della colonna, ecc. – GETah

risposta

7

L'output verrà allineato "correttamente" in JTextArea solo se si utilizza un carattere con interlinea singola. "Andale Mono 14", ad esempio, farebbe il trucco.

Inoltre, per semplificarti la vita ed evitare l'inferno del padding, usa String.format con il suo syntax.

String format = "%1$5s %2$-40s %3$-20s"; 
String someLine; 
while (whatEver...) { 
    ... 
    someLine = String.format(format, aNum, aName, aDate); 
    jTextArea1.append(someLine + "\n"); 
} 
+0

Grazie mille. Questo è quello che stavo cercando preziosamente. Risolve il mio problema. Saluti. – Subash

+0

JTable può andare bene, ma attenersi a JTextArea consente di aggiungere ulteriori informazioni non formattate allo stesso componente e altre tabelle se necessario. –

+0

mono-spazio lo fa perfettamente. – jmreader

8

Utilizzare invece un JTable (per informazioni apparentemente tabulari). Vedi How To Use Tables per ulteriori dettagli sugli esempi di lavoro &.

Table Sort Demo

+1

Sembra buono. Guiderò JTable. – Subash

6

È possibile utilizzare HTML con il componente swing o utilizzare JEditorPane.

JLabel jt=new JLabel(); 
jt.setText("<html> 
      <table border='1'> 
       <tr><th>No</th><th>Name</th></tr> 
       <tr><td>1</td><td>Mr.A</td></tr></table></html>"); 
2

È inoltre possibile modificare il carattere del JTextArea se è permesso nel vostro problema

textArea.setFont(new Font("monospaced", Font.PLAIN, 12)); 
+0

funziona come un fascino – Tony