मैं अपने व्यूपोर्ट में एक छवि प्रदर्शित करने के लिए स्क्रॉलपैन का उपयोग करना चाहता हूं, और छवि पर ग्रिड (या बॉक्स, या किसी अन्य प्रकार का पंजीकरण/स्थान मार्कर) ओवरले भी लेना चाहता हूं। स्क्रॉल करते समय मुझे स्थिर रहने के लिए ओवरले की आवश्यकता होती है (जिसका अर्थ है कि छवि ओवरले के नीचे "चलती है)। मैं एक चिकनी गति प्रदान करने के लिए व्यूपोर्ट में दृश्य को स्क्रॉल कर रहा हूं, और ओवरले व्यूपोर्ट के भीतर किसी निश्चित स्थान का संदर्भ प्रदान करना है। संकल्पनात्मक रूप से, व्यूपोर्ट में एक बड़े मानचित्र स्क्रॉलिंग के बारे में सोचें, और व्यूपोर्ट में एक आयताकार है जो स्थानांतरित नहीं होता है (व्यूपोर्ट के सापेक्ष) जो उस क्षेत्र को चिह्नित करता है जिसे कुछ उपयोगकर्ता क्रिया के आधार पर ज़ूम किया जा सकता है।जावा: स्क्रॉलपेन व्यूपोर्ट पर गैर-स्क्रॉलिंग ओवरले कैसे आकर्षित करें?
मुझे लगता है कि (लेकिन अभी तक पुष्टि नहीं हुई है) कि स्क्रॉलपेन कार्यान्वयन कुशलता से दृश्य को प्रतिपादित करता है (बैकिंग स्टोर से, प्रत्येक नए आंशिक एक्सपोजर के लिए पूरे व्यू (या यहां तक कि व्यूपोर्ट) को पुन: पेश नहीं करना) और इसलिए पसंद करेंगे पेंट() विधि को ओवरराइड नहीं करना है।
मैंने लेयरपेन को देखा है, और इसे महारत हासिल नहीं करते हुए, ऐसा लगता है कि यह एक क्रूर बल दृष्टिकोण है। स्क्रॉलपेन स्प्लिटपेन का एक घटक है और इसे स्थानांतरित/आकार बदल दिया जाएगा। मुझे उम्मीद है कि मुझे पूर्ण स्थिति का उपयोग करके व्यूपोर्ट और लेयरपेन के बीच सही रिश्ते को मैन्युअल रूप से बनाए रखना होगा। मैं जीयूआई डिजाइन & कार्यान्वयन में एक विशेषज्ञ से बहुत दूर हूं और मुझे यकीन है कि मुझे स्पष्ट रूप से अस्पष्ट और सुरुचिपूर्ण से लेकर संभावनाएं हैं जो एक अनुभवी व्यक्ति को पता चलेगा।
मैं किसी भी सुझाव के लिए खुला हूं, न केवल जिस मार्ग को मैंने शुरू किया है। क्या मुझे (क्या मैं) अपने स्प्लिटपेन में एक घटक के रूप में एक जेपीनेल जोड़ सकता हूं, फिर लेयरपेन पर अलग-अलग परतों पर मेरे स्क्रॉलपैन और ओवरले (एक और जेपीनल) युक्त लेयरपेन जोड़ें? क्या इसका समर्थन करने के लिए स्क्रॉलपेन में कार्यक्षमता है? मैंने जावा स्विंग ट्यूटोरियल और एपीआई दस्तावेज को देखा है लेकिन अभी तक कुछ भी नहीं देखा है।
धन्यवाद।
अद्यतन:
लिंक, trashgod के लिए धन्यवाद। यह अपेक्षा की तुलना में यह बहुत आसान था। लेयरपेन, ग्लासपेन, एक्सओआर-आधारित कंपोजिटिंग की कोई ज़रूरत नहीं है ... मुझे नहीं पता कि मेरे ओवरले को आकर्षित करने के लिए JViewport.paint() को ओवरराइड करने का प्रयास करने के लिए ऐसा क्यों नहीं हुआ - लेकिन नीचे दिए गए कोड के साथ मैंने अवधारणा को मान्य किया मुझे वह दे दो जो मैं ढूंढ रहा हूं। बस JViewport के उप-वर्ग का उपयोग करें और यह वही करता है जो मैं चाहता था (इस मामले में व्यूपोर्ट के केंद्र में एक आयत को ओवरले करना जबकि छवि स्क्रॉल नीचे है)। मैं कोई जीयूआई विशेषज्ञ नहीं हूं, और जावा एपीआई अविश्वसनीय रूप से चौड़ा है; मुझे नहीं पता कि आप लोग इसे अपने सिर में कैसे रखते हैं - लेकिन धन्यवाद!
class MyViewport extends JViewport {
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.BLACK);
g2.drawRect(getWidth()/4,getHeight()/4,getWidth()/2,getHeight()/2);
}
}
यह भी देखें ['स्क्रॉलपेनपेंट'] (http://stackoverflow.com/a/3518047/230513)।अद्यतन: यह भी देखें [* ग्लास फलक *] (http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html#glasspane)। या तो दोनों एक [एसएससीई] (http://sscce.org/) बनाने में आपकी मदद कर सकते हैं। – trashgod
वह लिंक सिर्फ सही दिशा में आवश्यक था। समाधान के साथ अद्यतन सवाल। धन्यवाद trashgod। – ags