2011-07-05 10 views
8

को लागू करने "किंग्स कोनों" जावा में (महिमा मल्टीप्लेयर त्यागी)।आप Java में किसी छवि ऑब्जेक्ट पर माउस-क्लिक ईवेंट का पता कैसे लगा सकते हैं?

मैं एक खिलाड़ी मेज पर कहीं और करने के लिए अपने हाथ से एक कार्ड (छवि) खींचें करने के लिए अनुमति देने के लिए कोशिश कर रहा हूँ। समस्या यह है कि खिलाड़ी का हाथ "फैन" होता है, इसलिए कार्ड की छवियां घूमती हैं और वे ओवरलैप होती हैं।

यहाँ एक हाथ का एक उदाहरण है:

enter image description here

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

एक घटना-आधारित दृष्टिकोण का उपयोग करना, मैं कैसे निर्धारित कर सकते हैं जो कार्ड हाथ से चुना जाता है?

+4

एचएम, आकार इंटरफ़ेस से प्राप्त एक या अधिक ठोस वर्गों का उपयोग कैसे करें? इसमें एक ऐसी विधि है जो काम में आ जाएगी। एफ़िनट्रांसफॉर्म के उपयोग के प्रति घूर्णन आसान होगा। –

उत्तर

5

AWT (और स्विंग) घटकों सामान्य रूप से आयताकार हैं (कुल्हाड़ियों के अनुरूप)।

लेकिन यह मामला नहीं होना चाहिए - जबकि असली सीमाएं आयताकार होना चाहिए, वास्तविक घटक जो घटक का उपयोग करता है वह छोटा हो सकता है। घटक contains(Point) विधि का समर्थन करता है, जिसे इवेंट प्रेषण तंत्र द्वारा बुलाया जाएगा जब भी प्रश्न उत्पन्न होता है कि कौन सा घटक एक बिंदु संबंधित है - उदाहरण के लिए, माउस क्लिक के लिए। (विभिन्न घटकों के ओवरलैपिंग को मूल कंटेनर के अंदर जेड-ऑर्डर द्वारा संभाला जाएगा।)

आप इस आकार को Shape.contains() विधि के आधार पर अपने आकार के रूप में एक एफ़िन ट्रांसफॉर्म आयत का उपयोग करके कार्यान्वित कर सकते हैं। आपके प्रत्येक घूर्णन घटकों को अपना स्वयं का आकार पता होगा (या इसे अपने एफ़िनट्रांसफॉर्म से फ्लाई पर उत्पन्न करें, वही एक जिसे चित्रकला के लिए भी इस्तेमाल किया जाएगा)।

जो आपके कार्ड की व्यवस्था के लिए एक कस्टम LayoutManager भी है। (नाम के बावजूद कार्डलाउट का उपयोग न करें।)

मुझे यकीन नहीं है कि मैं प्रत्येक कार्ड के लिए अलग-अलग घटकों के तरीके का पालन करता हूं, लेकिन आपको निश्चित रूप से घूर्णन आयतों का प्रतिनिधित्व करने वाली कुछ वस्तुओं की आवश्यकता होती है।

+0

पूरी तरह से काम किया। समाधान AffineTransform के createTransformedShape का उपयोग करना है और फिर जांचें कि उस आकार में माउस-क्लिक का बिंदु शामिल है या नहीं। धन्यवाद। – rtheunissen

+0

@ paranoid-android: आपको इस उत्तर के बाईं ओर टिक क्लिक करके इस उत्तर को स्वीकार करना चाहिए। –

+0

@ मार्टिजन Courteaux: और इसलिए हम सीखते हैं। धन्यवाद। – rtheunissen

संबंधित मुद्दे

 संबंधित मुद्दे