简体   繁体   中英

Align Strings in columns in JTextArea

I want to print Strings in JTextArea and align them properly. Its hard to explain so I will upload the screen shot of what I am trying to achieve.

到目前为止我所得到的屏幕截图

So Strings printed in each line are printed from Paper object which has parameters (id, title, author, date, rank). The data is read from a text file and is stored in a LinkedList using loadPaper() function.

Then displayPapers() function is used to display content of the Paper object to the JTextArea. displayPapers() is listed below:

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

The padString() function adds spaces to the String so that all of them have same number of words. PadString() is listed below:

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

I have worked on this for a while but still cant get the solution. As you can notice the above picture not everything is perfectly aligned as intended.

How do I align them perfectly so that it looks nicer? Thanks.

Output will be aligned "properly" in your JTextArea only if you use a mono-spaced font. "Andale Mono 14" for example would do the trick.

Also, in order to make your life easier and avoid the padding hell, use String.format with it's syntax .

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

Use a JTable instead (for what is apparently tabular information). See How To Use Tables for more details & working examples.

表格排序演示

You may use HTML with swing component or use 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>");

如果您的问题允许,您还可以更改 JTextArea 的字体

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM