2011-12-16 40 views
6

Tôi muốn in các chuỗi trong JTextArea và căn chỉnh chúng đúng cách. Thật khó giải thích vì vậy tôi sẽ tải lên ảnh chụp màn hình về những gì tôi đang cố gắng đạt được.Căn chỉnh các chuỗi trong các cột trong JTextArea

Screen shot of what I have got so far

Vì vậy Strings in trong mỗi dòng được in từ đối tượng giấy trong đó có các thông số (id, title, tác giả, ngày, xếp hạng). Dữ liệu được đọc từ một tệp văn bản và được lưu trữ trong một LinkedList bằng hàm loadPaper().

Sau đó hàm displayPapers() được sử dụng để hiển thị nội dung của đối tượng Paper với JTextArea. displayPapers() được liệt kê dưới đây:

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

Các padString() chức năng bổ sung thêm không gian để String để tất cả trong số họ có cùng một số từ. PadString() được liệt kê dưới đây:

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

Tôi đã làm việc này một lúc nhưng vẫn không thể có được giải pháp. Như bạn có thể nhận thấy các hình ảnh trên không phải tất cả mọi thứ là hoàn toàn phù hợp như dự định.

Làm cách nào để sắp xếp chúng hoàn hảo để trông đẹp hơn? Cảm ơn.

+3

Tại sao bạn không sử dụng một JTable? Có vẻ thích hợp hơn để hiển thị dữ liệu trong cột. –

+1

Tôi thà đi cho một JTable mà sẽ cung cấp cho bạn sự linh hoạt của chơi xung quanh với kích thước cột và vị trí vv – GETah

Trả lời

7

Kết quả sẽ được căn chỉnh "đúng" trong JTextArea chỉ khi bạn sử dụng phông chữ đơn cách. Ví dụ: "Andale Mono 14" sẽ thực hiện thủ thuật.

Ngoài ra, để làm cho cuộc sống của bạn dễ dàng hơn và tránh địa ngục đệm, hãy sử dụng String.format với 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"); 
} 
+0

Cảm ơn rất nhiều. Đó là những gì tôi đã tìm kiếm. Giải quyết vấn đề của tôi. Chúc mừng. – Subash

+0

JTable có thể tốt, nhưng gắn bó với JTextArea cho phép thêm thông tin chưa được định dạng bổ sung vào cùng một thành phần cũng như nhiều bảng nếu cần. –

+0

mono-khoảng cách nào nó hoàn hảo. – jmreader

8

Thay vào đó, hãy sử dụng số JTable (đối với thông tin bảng rõ ràng). Xem How To Use Tables để biết thêm chi tiết & ví dụ hoạt động.

Table Sort Demo

+1

Điều đó có vẻ tốt. Tôi sẽ có một cái nhìn tại JTable. – Subash

6

Bạn có thể sử dụng HTML với thành phần xoay hoặc sử dụng 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

Bạn cũng có thể thay đổi font chữ của JTextArea nếu nó được cho phép trong vấn đề của bạn

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

hoạt động như một sự quyến rũ – Tony

Các vấn đề liên quan