आप इसे एडब्ल्यूटी क्लिप के साथ कर सकते हैं। आपको उस आयत की सीमाओं को जानना होगा जिन्हें आप बाहर करना चाहते हैं, और आपके ड्राइंग क्षेत्र की बाहरी सीमाएं।
निम्नलिखित डेमो कोड एक फ्रेम खोलता है और इसमें एक एकल पैनल प्रदर्शित करता है। पैनल की पेंट विधि एक उदाहरण क्लिप सेट करती है जो मध्य में एक आयताकार छेद के साथ एक आयत की तरह दिखती है, जब वास्तव में यह एक बहुभुज है जो उस क्षेत्र के आस-पास के क्षेत्र का वर्णन करता है जिसे हम बाहर करना चाहते हैं। क्लिप आयत को बहिष्कृत आयत की सीमाओं और ड्राइंग क्षेत्र के बाहरी किनारे से बना होना चाहिए, लेकिन मैंने इसे आसान रखने और कार्य को बेहतर तरीके से चित्रित करने के लिए हार्ड-कोडित मान छोड़े हैं (मुझे उम्मीद है!)
+-------------------+
| clip drawing area |
+---+-----------+ |
| | excluded | |
| | area | |
| +-----------+ |
| |
+-------------------+
इस विधि को मैन्युअल रूप से लाइन चौराहे की गणना करने पर लाभ होता है जिसमें यह सभी एडब्ल्यूटी पेंटिंग को बाहर किए गए क्षेत्र में जाने से रोकता है। मुझे नहीं पता कि यह आपके लिए उपयोगी है या नहीं।
मेरा डेमो क्लिप के काम को चित्रित करने के लिए पूरे क्षेत्र में एक काले आयताकार और एक सफेद सफेद विकर्ण रेखा को चित्रित करता है।
public class StackOverflow extends JFrame {
public static void main(String[] args) {
new StackOverflow();
}
private StackOverflow() {
setTitle("Clip with a hole");
setSize(320,300);
getContentPane().add(new ClipPanel());
setVisible(true);
}
}
class ClipPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Polygon clip = new Polygon(
new int[]{ 0, 100, 100, 0, 0, 20, 20, 80, 80, 0 },
new int[]{ 0, 0, 60, 60, 20, 20, 40, 40, 20, 20 },
10
);
g.setClip(clip);
g.setColor(Color.BLACK);
g.fillRect(0,0,100,60);
g.setColor(Color.WHITE);
g.drawLine(0,0,100,60);
}
}
धन्यवाद, सही! – tuler
+1 - मेरा से अधिक बेहतर :) – banjollity
पठनीयता और विस्तारशीलता के मामले में क्षेत्र विधि बेहतर है (आप इसके बाहर कोई भी आकार और क्लिप बना सकते हैं) लेकिन मुझे लगता है कि इसमें कुछ प्रदर्शन समस्याएं हो सकती हैं (क्षेत्र वर्ग थोड़ा सा है शीर्ष पर शायद)। यदि आपको क्लिप पर कई बार आकर्षित करने की आवश्यकता है और देखें कि क्या अन्य विधि तेज है तो आपको इसे बेंचमार्क करना चाहिए। –