मैं एक जेएसक्स्टपेन युक्त JSCrollPane पर स्मार्ट ऑटोस्क्रॉलिंग को लागू करने का प्रयास कर रहा हूं। JTextPane का उपयोग मेरे ऐप को रंग में लॉग इन करने के लिए किया जाता है। हालांकि मैं स्मार्ट ऑटोस्कोलिंग करने की कोशिश कर रहे दीवार में दौड़ रहा हूं। स्मार्ट ऑटोस्कोलिंग द्वारा मेरा मतलब यह नहीं है कि प्रत्येक बार कुछ बदलावों में अंधेरे से ऑटोस्क्रॉलिंग हो, मेरा मतलब है कि यह देखने के लिए जांच कर रहा है कि क्या आपका स्क्रॉल सभी तरह से नीचे है, फिर ऑटोस्क्रॉल। हालांकि कोई बात नहीं क्या मैं इसे या तो हमेशा autoscrolls या एक परीक्षण स्क्रिप्ट के रूप में बिल्कुलस्मार्ट JScrollPane autoscrolling
नहीं है, यहाँ सेटअप है बदसूरत ऑटो टेस्ट जोड़ने है (JFrame बाहर छोड़ दिया गया है)
final JTextPane textPane = new JTextPane();
textPane.setEditable(false);
final JScrollPane contentPane = new JScrollPane(textPane);
contentPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
और यहाँ लूप
while (true)
try {
Thread.sleep(1000);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
JScrollBar scrollBar = scroll;
boolean preCheck = ((scrollBar.getVisibleAmount() != scrollBar.getMaximum()) && (scrollBar.getValue() + scrollBar.getVisibleAmount() == scrollBar.getMaximum()));
System.out.println("Value: " + scroll.getValue()
+ " | Visible: " + scrollBar.getVisibleAmount()
+ " | Maximum: " + scrollBar.getMaximum()
+ " | Combined: " + (scrollBar.getValue() + scrollBar.getVisibleAmount())
+ " | Vis!=Max : " + (scrollBar.getVisibleAmount() != scrollBar.getMaximum())
+ " | Comb=Max: " + (scrollBar.getValue() + scrollBar.getVisibleAmount() == scrollBar.getMaximum())
+ " | Eval: " + preCheck);
StyledDocument doc = textPane.getStyledDocument();
doc.insertString(doc.getLength(), "FAGAHSIDFNJASDKFJSD\n", doc.getStyle(""));
if (!preCheck)
textPane.setCaretPosition(doc.getLength());
} catch (BadLocationException ex) {
ex.printStackTrace();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
यह सुंदर नहीं है, लेकिन यह काम पूरा हो जाता है।
यहाँ हालांकि प्रासंगिक जांच
boolean preCheck = ((scrollBar.getVisibleAmount() != scrollBar.getMaximum()) && (scrollBar.getValue() + scrollBar.getVisibleAmount() == scrollBar.getMaximum()));
if (preCheck)
textPane.setCaretPosition(doc.getLength());
हिस्सा thats Thats मुझे परेशानी दे रहा है। यह देखने के लिए पहले एक जांच है कि बार दिखाई दे रहा है लेकिन अनुपयोगी (पर्याप्त पाठ नहीं है, बार को पूर्ण लंबाई बना रहा है), फिर यदि बार का निचला भाग अधिकतम के बराबर है। सिद्धांत रूप में, यह काम करना चाहिए। हालांकि, चारों ओर चेक को स्थानांतरित करने सहित कुछ भी नहीं, मुझे जो परिणाम चाहिए वो मिल गया है।
कोई सुझाव?
this या this का कोई डिप्लिकेट नहीं है, क्योंकि वे इसे हमेशा स्क्रॉल करना चाहते हैं, न कि कभी-कभी।
क्या आपने इसे हल किया? मेरे पास बिल्कुल वही कार्य है, और, वास्तव में, अभी भी समाधान नहीं मिल रहा है। –