2011-12-16 13 views
6

में कॉलम में तारों को संरेखित करें मैं JTextArea में स्ट्रिंग्स प्रिंट करना चाहता हूं और उन्हें ठीक से संरेखित करना चाहता हूं। यह समझाना मुश्किल है कि मैं जो हासिल करने की कोशिश कर रहा हूं उसके स्क्रीन शॉट को अपलोड करूंगा।JTextArea

Screen shot of what I have got so far

तो प्रत्येक पंक्ति में मुद्रित स्ट्रिंग्स कागज वस्तु जो मानकों (आईडी, शीर्षक, लेखक, तिथि, रैंक) है से मुद्रित कर रहे हैं। डेटा को टेक्स्ट फ़ाइल से पढ़ा जाता है और लोडपेपर() फ़ंक्शन का उपयोग करके लिंक्डलिस्ट में संग्रहीत किया जाता है।

फिर डिस्प्ले पेपर() फ़ंक्शन का उपयोग पेपर ऑब्जेक्ट की सामग्री 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() फ़ंक्शन स्ट्रिंग को रिक्त स्थान जोड़ती है, ताकि उन सभी शब्दों का एक ही नंबर है। पैडस्ट्रिंग() नीचे सूचीबद्ध है:

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

मैंने थोड़ी देर के लिए इस पर काम किया है लेकिन अभी भी समाधान नहीं मिल रहा है। जैसा कि आप उपरोक्त तस्वीर को देख सकते हैं, सब कुछ पूरी तरह से इरादे से गठबंधन नहीं है।

मैं उन्हें पूरी तरह से संरेखित कैसे करूं ताकि यह अच्छा लगे? धन्यवाद।

+3

आप एक JTable क्यों इस्तेमाल नहीं करते आपकी समस्या में अनुमति दी है बदल सकता हूँ? कॉलम में डेटा प्रदर्शित करने के लिए यह अधिक उपयुक्त लगता है। –

+1

मैं एक जेटीबल के लिए जाना चाहूंगा जो आपको कॉलम आकार और स्थान इत्यादि के साथ खेलने की लचीलापन देगा। – GETah

उत्तर

7

आउटपुट अपने JTextArea में "ठीक से" गठबंधन किया जाएगा केवल यदि आप एक मोनो स्थान दिया गया फ़ॉन्ट का उपयोग। उदाहरण के लिए "एंडेल मोनो 14" चाल चलती है।

इसके अलावा, अपने जीवन को आसान बनाने और पैडिंग नरक से बचने के लिए, String.format का उपयोग 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

बहुत बहुत धन्यवाद। वह चीज जो मैं अनमोल रूप से खोज रहा था। मेरी समस्या हल करता है। चीयर्स। – Subash

+0

जेटीबल ठीक हो सकता है, लेकिन JTextArea पर चिपकने से एक ही घटक को अतिरिक्त अनौपचारिक जानकारी और साथ ही आवश्यकतानुसार अधिक तालिकाओं को जोड़ने की अनुमति मिलती है। –

+0

मोनो-स्पेस इसे पूरी तरह से करता है। – jmreader

8

इसके बजाय JTable का उपयोग करें (स्पष्ट रूप से सारणीबद्ध जानकारी के लिए)। & कामकाजी उदाहरणों के लिए How To Use Tables देखें।

Table Sort Demo

+1

यह अच्छा लगता है। मैं जेटीबल पर एक नज़र डालेगा। – Subash

6

आप स्विंग घटक के साथ HTML का उपयोग करें या 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

तुम भी JTextArea के फॉन्ट अगर यह

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

एक आकर्षण की तरह काम करता है – Tony

संबंधित मुद्दे