Выравнивание строк по столбцам в JTextArea

Я хочу печатать строки в JTextArea и правильно их выравнивать. Это трудно объяснить, поэтому я загружу снимок экрана того, чего я пытаюсь достичь.

Screen shot of what I have got so far

Итак, строки, выводимые в каждой строке, печатаются из объекта Paper, который имеет параметры (id, title, author, date, rank). Данные считываются из текстового файла и сохраняются в LinkedList с помощью функции loadPaper().

Затем функция displayPapers() используется для отображения содержимого объекта Paper в JTextArea. displayPapers() приведена ниже:

/** 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

Функция padString() добавляет пробелы к строке, чтобы все они имели одинаковое количество слов. PadString() приведена ниже:

/** 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

Я работал над этим некоторое время, но так и не смог найти решение. Как вы можете заметить на рисунке выше, не все идеально выровнено.

Как мне выровнять их идеально, чтобы это выглядело красивее? Спасибо.

7
задан mKorbel 16 December 2011 в 11:43
поделиться