निम्न कोड को देखते हुए:
import java.awt.Color; आयात करें java.awt.Dimension; आयात java.awt.Graphics; Import java.awt.Point; आयात करें java.awt.event.MouseEvent; आयात करें java.awt.event.MouseListener; आयात करें java.awt.event.MouseMotionListener; आयात करें java.util.ArrayList; आयात करें java.util.Iterator; आयात javax.swing.JFrame; आयात javax.swing.JPanel; / ** * * @ लेखक X2 * * / सार्वजनिक वर्ग पॉलीगोनरजफ्रेम {सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {जेफ्रेम फ्रेम = नया जेफ़्रैम ("बहुभुज बनाएं"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); Frame.setContentPane (नया ड्राइंगपैनेल ()); frame.pack (); frame.setVisible (सही); }} / ** * मुख्य वर्ग * @ लेखक X2 * * / वर्ग ड्राइंगपैनल एक्सपैंटमेंट जेपीएनएल लागू करता है माउसलाइस्टनर, माउसमोशन लिस्टनर {/ ** * * / प्राइवेट स्टैटिक फाइनल लम्बी सीरियलव्यूअरयूएनयूआईडी = 1 एल; निजी स्थिर अंतिम आयाम MIN_DIM = नया आयाम (300, 300); निजी स्थिर अंतिम आयाम PREF_DIM = नया आयाम (500, 500); निजी बूलियन बहुभुज = फॉल्स; निजी अंतिम प्वाइंट ट्रैकपॉइंट = नया बिंदु (); // 'डमी' बिंदु माउस निजी अर्रेलिस्ट और लेफ्टिनेंट; बिंदु & gt; अंक = नया अर्रेलिस्ट & lt; प्वाइंट & gt; (); // एक पॉलीगॉन निजी अर्रेलिस्ट और लेफ्टिनेंट; प्वाइंट; सहायक = नया अर्रेलिस्ट & lt; प्वाइंट & gt; (); // एक पॉलीगॉन पब्लिक अर्रे लिस्ट और लेफ्टिनेंट; प्वाइंट; कॉपी क्रिएट (अर्रेलिस्ट & lt; प्वाइंट & gt; इनपुट, अर्रेलिस्ट & lt; प्वाइंट & gt; आउटपुट) {int i = 0; यदि (आउटपुट == शून्य) आउटपुट = नया अर्रेलिस्ट & lt; प्वाइंट & gt; (); जबकि (i & lt; input.size ()) {output.add (input.get (i)); i ++; } वापसी आउटपुट; } / ** * खिड़कियों के आयामों को सेट करना * / लोक आयाम मिलनामिकमकार () {लौटें MIN_DIM; } सार्वजनिक आयाम getPreferedSize () {वापस PREF_DIM; } / ** * केवल इस वर्ग के लिए आवश्यक कंस्ट्रक्टर * / DrawingPanel () {super (); addMouseListener (this); addMouseMotionListener (this); } / ** * ड्राइंग ही * / पब्लिक रिक्त पेंट कॉमोनेंट (ग्राफ़िक्स जी) {सुपरपिंटकंपोनेंट (जी); Int numpoints = points.size (); यदि (numpoints == 0) वापसी; // पॉइंट पॉइंट पॉइंट = (बिंदु) points.get (0) को खींचने के लिए नहीं; // बहुभुज ईटरेटर डालें & lt; प्वाइंट & gt; यह = अंक। निदेशक (); जबकि (यह hasNext ()) {बिंदु curpoint = (प्वाइंट) it.next (); खींचना (जी, पॉइंट पॉइंट, कर्पॉइंट); पिछला पॉइंट = कलपॉइंट; } // अब ट्रैकिंग लाइन को आकर्षित करें या बहुभुज को पूरा करें यदि (बहुभुज == सच) {खींचना (जी, पॉइंट पॉइंट, (प्वाइंट) अंक.गेट (0)); } और // बहुभुज डोन == झंडा ड्रॉ (जी, प्रॉपवॉइंट, ट्रैकपॉइंट); } / ** * माउस लिस्टनर इंटरफ़ेस * / सार्वजनिक शून्य माउस चूल्हे (माउसईवेंट एव्ट) {int x = evt.getX (); Int y = evt.getY (); स्विच (evt.getClickCount ()) {केस 1: // एकल-क्लिक करें यदि (बहुभुज डोन == सच) {this.helper = this.copyCreate (यह। पॉइंट्स, this.helper); // सहायक निर्देशों में नए निर्देशांक की प्रतिलिपि बनाएँ। स्पष्ट (); बहुभुज डोन = गलत; } Points.add (नया बिंदु (एक्स, वाई)); फिर से रंगना (); टूटना; मामले 2: // बहु-क्लिक polygonDone = true; Points.add (नया बिंदु (एक्स, वाई)); // repaint (); टूटना; डिफ़ॉल्ट: // कुछ भी नहीं तोड़ना; }} / ** * माउसमोशन लिस्टनर इंटरफ़ेस * / सार्वजनिक वाइड माउस मूवड (माउसईवेंट एव्ट) {trackPoint.x = evt.getX (); TrackPoint.y = evt.getY (); फिर से रंगना (); } / ** * अंक और रेखाएं खींचें * @ परम जी * @ पीआरएम पी 1 * @ पीआरएम पी 2 * / निजी शून्य ड्रा (ग्राफिक्स जी, प्वाइंट पी 1, प्वाइंट पी 2) {int x1 = p1.x; Int y1 = p1.y; Int x2 = p2.x; Int y2 = p2.y; // पंक्ति को पहले खींचें ताकि अंक / लाइन के शीर्ष पर दिखाई जाए, g.setColor (Color.green.darker ()) के नीचे नहीं; G.drawline (x1 + 3, y1 + 3, x2 + 3, y2 + 3); G.drawline (x1 + 4, y1 + 4, x2 + 4, y2 + 4); G.drawline (x1 + 5, y1 +5, x2 +5, y2 +5); g.setColor (Color.green); जीफिल (x1, y1, 8, 8); g.setColor (Color.black); जीफिल (x2, y2, 8, 8); } सार्वजनिक शून्य माउस ड्रेगग्ड (माउसइवेंट एव्ट) {/ * Empty * /} सार्वजनिक शून्य माउस दबाया हुआ (माउसइवेंट एव्ट) {/ * Empty * /} सार्वजनिक शून्य माउस रीलीज़ेड (माउसईवेंट एव्ट) {/ * Empty * /} सार्वजनिक शून्य माउस ईंट (माउसईवेंट एव्ट) मैं केवल एक बहुभुज हर बार आकर्षित कर सकता हूं, जिसका अर्थ है - जब मैं शुरू करने का प्रयास करता हूं नया बहुभुज "पुराना" बहुभुज गायब हो जाता है, लेकिन मुझे समझ में नहीं आता कि क्यों तो मैं कई बहुभुज कैसे आकर्षित करूं?
पुराने बहुभुज को गायब होने का कारण क्या है?
मैं आपकी मदद की सराहना करता हूं P>
बहुभुजों को वास्तव में points.clear () पर कॉल करके मिटाया जा रहा है। इसका मुकाबला करने के लिए, आप अलग-अलग सूची में पिछले बहुभुजों के बारे में कक्षा का उपयोग कर समन्वय जानकारी को बनाए रख सकते हैं, जो कि "प्रगति" बहुभुज के साथ चित्रित किया जा सकता है इसे इन्हें रेखांकित किया गया है।
No comments:
Post a Comment