2009-10-26 12 views
57

मैंने JSCrollPane पर एक JTextArea एम्बेड किया है और आउटपुट के लिए उस JTextArea का उपयोग कर रहा हूं।जावा जीयूआई में JTextArea के ऑटो-स्क्रॉलिंग को कैसे सेट करें?

मैं चाहता हूं कि जब भी आउटपुट JTextArea के आकार से परे हो जाए, तो JTextArea स्वचालित रूप से स्क्रॉल करता है ताकि उपयोगकर्ता को हालिया आउटपुट देखने के लिए मैन्युअल स्क्रॉल डाउन करने की आवश्यकता न हो।

मैं यह कैसे कर सकता हूं?

मैंने पहले से ही JTextArea और JScrollPane दोनों की ऑटोस्कोल संपत्ति सेट कर दी है।

उत्तर

130

JDK1.4.2 का उपयोग कर (या उससे पहले) सबसे आम सुझाव आप मंचों में मिलेगा निम्नलिखित की तरह कोड का उपयोग करने के लिए है जब:

textArea.append(...); 
textArea.setCaretPosition(textArea.getDocument().getLength()); 

हालांकि, मैं सिर्फ देखा है JDK5 में इस मुद्दे है वास्तव में एक एपीआई परिवर्तन द्वारा हल किया गया है। अब आप पाठ क्षेत्र के DefaultCaret पर एक संपत्ति सेट करके इस व्यवहार को नियंत्रित कर सकते हैं। इस दृष्टिकोण का उपयोग करना कोड होगा: इस विषय की

JTextArea textArea = new JTextArea(); 
DefaultCaret caret = (DefaultCaret)textArea.getCaret(); 
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 

एक अधिक विस्तृत विवरण यहां पाया जा सकता: Text Area Scrolling

+0

@camickr, मैं लिंक उपयोग नहीं कर सकते, मैं एक कॉर्पोरेट फ़ायरवॉल के पीछे बैठा हूँ। क्या आप उस लिंक से महत्वपूर्ण चीजें पोस्ट कर सकते हैं, मैं आपको वोट दूंगा :) धन्यवाद। –

+1

कोई विचार क्यों यह काम नहीं कर रहा है (नेटबींस निर्माता का उपयोग करके फ़ॉर्म के लायक होने के लिए क्या बनाया गया है)? –

+0

@ साइबर-भिक्षु, संख्या एसएससीसीई बनाएं। यदि यह अभी भी काम नहीं करता है तो आप एक प्रश्न बना सकते हैं और अपना एसएससीसीई पोस्ट कर सकते हैं। – camickr

2
JScrollBar vbar = scrollPane.getVerticalScrollBar(); 

    for (int i = 0; i < 20; i++) { 

     myJTxt.append("This is text " + i + "\n"); 
     vbar.setValue(vbar.getMaximum()); 
     vbar.paint(vbar.getGraphics()); 
     myJTxt.scrollRectToVisible(myJTxt.getVisibleRect()); 
     myJTxt.paint(myJTxt.getGraphics()); 
     try { 
      Thread.sleep(250); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(ScrollTextView.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
-3

इस प्रयास करें:

JTextArea jTextArea = new JTextArea(); 
JScrollPane jScrollPane = new JScrollPane(); 
jScrollPane.setViewport(jTextArea); 
+4

नहीं .............. – mKorbel

2

जब आप कहीं भी पर क्लिक करें JTextArea, ऑटो-स्क्रॉलिंग को रोकना संभव है। क्योंकि एक बार देखभाल की स्थिति बदल गई, दृश्य बिंदु भी बदल गया। इस समय जब आप कुछ टेक्स्ट जोड़ते हैं या जोड़ते हैं तो आपको देखभाल स्थिति निर्धारित करनी चाहिए। मेरे रास्ते पर, मैंने सेट कैरेट स्थिति सहित विधि बनाई, और फिर इसे जोड़ने या जोड़ने के लिए इसका उपयोग करें।

1
JTextArea jTextArea = new JTextArea(); 
    DefaultCaret caret = (DefaultCaret)jTextArea.getCaret(); 
    caret.setUpdatePolicy(DefaultCaret.OUT_BOTTOM); 
-2

उपयोग इस बजाय

JTextArea textArea = new JTextArea(); 
DefaultCaret caret = (DefaultCaret)textArea.getCaret(); 
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 
scrollPane = new JScrollPane(); 
scrollPane.add(textArea); 
scrollPane.setViewportView(textArea); 
संबंधित मुद्दे