2013-02-13 97 views
18

मेरे पास मौजूदा Java Swing एप्लिकेशन है। एप्लिकेशन के बीच में एक JPanel है जिसे मैं zoom in and out में सक्षम होना चाहता हूं। JPanel पर JComponents है (ज्यादातर अन्य JPanels और JLabels)।जावा स्विंग में ज़ूम जेननेल

mouse स्थिति को उचित रूप से समायोजित करने की आवश्यकता होगी - इसलिए को JPanel ज़ूम करने के बाद भी बने रहने की आवश्यकता है। जैसे कि प्रत्येक component के paint विधियों को आसानी से बदलना प्रतीत नहीं होता है।

संपादित करें:

enter image description here

ठीक मैं इसे एक तरह से कुछ मामूली संपादन के साथ MagnifierUIclass का उपयोग कर काम कर गया। हालांकि मेरे द्वारा निर्मित किए गए बड़े पैनल में गलत mouseevents है - यानी पैनल स्केल किया गया है, mouseevents नहीं हैं।

+0

जेएक्सएलयर यह कर सकता है। एक उदाहरण (या यहां तक ​​कि जेएक्सएलयर स्वयं) को पकड़ना अब समस्याग्रस्त है – MadProgrammer

+0

मुझे उल्लेख करना चाहिए, मैंने निम्नलिखित विधियों का प्रयास किया है 1) [Utils4Swing5] (http://javadeveloperslife.wordpress.com/2009/07/18/zooming- स्विंग /) जो बिल्कुल काम नहीं करता है। 2) मैंने जेएक्सएलयर और पीबीट्रांसफॉर्म का उपयोग करके पीट ब्लोक की विधि का भी प्रयास किया है - हालांकि पीट ब्लोक ने ग्रह छोड़ दिया है और अब मुझे पीबीट्रांसफॉर्म [लिंक] (http://www.java.net/node/) के लिए आवश्यक जार नहीं मिल सकता है। 700255) – sboy031

+1

* "कोई सुझाव?" * इसे स्क्रीन रिज़ॉल्यूशन या ओएस 'इनबिल्ट स्क्रीन आवर्धन उपयोगिता के उपयोगकर्ता विकल्प पर छोड़ दें। यदि उपयोगकर्ता को इसकी आवश्यकता है, तो उन्हें पता चलेगा कि इसे कहां मिलना है। –

उत्तर

5

यह सिर्फ एक scetch है:

    एक AffineTransform जो पैमाने कारक का प्रतिनिधित्व करता है की अपनी JPanel रखें ट्रैक में
  • (AffineTransform.scale(double,double) देखते हैं,
  • ओवरराइड अपने JPanel की paint विधि: super.paint कॉल करने से पहले affine लागू ऑब्जेक्ट (paint विधि के पैरामीटर से डाला गया) में परिवर्तन Graphics2D.setTransform(AffineTransform) पर कॉल करके super.paint पर कॉल करें
  • विधियों को ओवरराइड करें processMouseEvent, processMouseMotionEvent और processMouseWheelEvent, अपने माउस इवेंट पैरामीटर (AffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D)) के निर्देशांक में एफ़िन रूपांतरण लागू करें, संबंधित super-बाद में विधि को कॉल करें।

उम्मीद है कि इससे मदद मिलती है।

1

SwingUtilities.convertPoint (स्रोत, बिंदु, गंतव्य) आज़माएं;