/ / स्विंग: मैं JInternalFrame को कंटेनर के अंदर अन्य घटकों के साथ समान रूप से कैसे व्यवहार कर सकता हूं? - जावा, यूजर-इंटरफेस, स्विंग, जिनेनफ्रेम, ज्यूड्सकॉप्टेन

स्विंग: मैं जेनरलफ्रेम को एक कंटेनर के अंदर अन्य घटकों के बराबर कैसे प्राप्त कर सकता हूं? - जावा, यूजर इंटरफेस, स्विंग, जेनटरफ्रेम, जेडस्कटॉपपेन

पृष्ठभूमि की जानकारी:

मैं एक दृश्य आरेख संपादक लागू कर रहा हूं, जिसमें शामिल हैं

  • विभिन्न जटिल तत्व (टाइटल बार, सब-एलिमेंट्स के साथ पुन: बड़े आकार के) और
  • अलग-अलग सरल तत्व (पुन: प्रयोज्य नहीं, कोई शीर्षक पट्टी नहीं, कोई उप-तत्व नहीं)।

सभी तत्व ड्रैग करने योग्य हैं।

मैं JInternalFrame (जटिल तत्वों के लिए) का उपयोग कर रहा हूंजेपीलाल के साथ (सरल तत्वों के लिए) एक योजनाबद्ध आरेख के तत्वों का प्रतिनिधित्व करने के लिए। एक कंटेनर है (या तो JDesktopPane या JLayeredPane), जिसमें शामिल हैं ये सभी तत्व।

मुझे इस अवधारणा के साथ कई समस्याएं हैं:

मामला एक - कंटेनर एक JDesktopPane है:

  • JInternalFrames हमेशा अन्य तत्वों से ऊपर होते हैं।
  • अन्य तत्वों को क्लिक करने से पहले सक्रिय JInternalFrame "t" को निष्क्रिय नहीं करता है

केस 2 - कंटेनर एक JLayeredPane है:

  • JInternalFrame के अंदर कुछ तत्वों को क्लिक करने के बाद, यह रहता है "सक्रिय" हमेशा के लिए।

केस 3 - JInternalFrame सब कुछ के लिए इस्तेमाल किया, लेकिन सरल तत्वों के लिए सजावट के बिना:

  • मेरी कस्टम सीमा (जब मुझे मैन्युअल रूप से हटाने की आवश्यकता होती है JInternalFrame का शीर्षक बार) हर बार वर्तमान एलएएफ सीमा द्वारा प्रतिस्थापित किया जाता है, के बाद JInternalFrame को सक्रिय / निष्क्रिय करना।

मैं वैसे भी JInternalFrames को सक्रिय करने के पीछे पूरी अवधारणा नहीं देता। अगर मैं एक JInternalFrame को सक्रिय नहीं बना सकता, मैं कर सकता चुनें केस 2 कोई भी खुश होगा।

कृपया मुझे सलाह दें, दी गई समस्याओं का सरल और सीधा समाधान क्या होगा।

नोट: घटकों का चयन और JInternalFrame की सक्रियता अलग-अलग चीजें लगती हैं।

उत्तर:

जवाब के लिए 0 № 1

मैं आपकी समस्या को गलत समझ सकता हूं। क्या आपने JIF के सेट किए हुए () तरीके को देखने की कोशिश की है? ऐसा लगता है कि विधि ओवरराइड और वीटोबल सक्रियण घटनाओं के लिए समर्थन हैं।

संपादित करें: हो सकता है कि हमारे पास जावाडॉक राज्यों के रूप में कुछ शब्दावली गलत हो:

/**
* Selects or deselects the internal frame
* if it"s showing.
* A <code>JInternalFrame</code> normally draws its title bar
* differently if it is
* the selected frame, which indicates to the user that this
* internal frame has the focus.
* When this method changes the state of the internal frame
* from deselected to selected, it fires an
* <code>InternalFrameEvent.INTERNAL_FRAME_ACTIVATED</code> event.
* If the change is from selected to deselected,
* an <code>InternalFrameEvent.INTERNAL_FRAME_DEACTIVATED</code> event
* is fired.
*
* @param selected  a boolean, where <code>true</code> means this internal frame
*                  should become selected (currently active)
*                  and <code>false</code> means it should become deselected
* @exception PropertyVetoException when the attempt to set the
*            property is vetoed by the <code>JInternalFrame</code>
*
* @see #isShowing
* @see InternalFrameEvent#INTERNAL_FRAME_ACTIVATED
* @see InternalFrameEvent#INTERNAL_FRAME_DEACTIVATED
*
* @beaninfo
*     constrained: true
*           bound: true
*     description: Indicates whether this internal frame is currently
*                  the active frame.
*/

2 संपादित करें: अब मैं आपके दूसरे मामले को फिर से पढ़ता हूं। मैं कहूंगा कि प्रत्येक JIF का अपना अलग फोकस / चयन वातावरण है। आप एक ऐसी विधि बना सकते हैं जो आपके सभी JIF को ट्रेस करती है और इसमें कुछ भी तब तक रद्द कर देती है जब तक कि इसका वह घटक नहीं जिसे आप चुनना चाहते थे।


जवाब के लिए 0 № 2

जब आप अपने JInternalFrame = को इनिशियलाइज़ करते हैं, तो इसे आज़माएँ

 new JInternalFrame(<your args>) {
protected void fireInternalFrameEvent(int id){
if (id != InternalFrameEvent.INTERNAL_FRAME_ACTIVATED) {
super.fireInternalFrameEvent(id);
}
}
};

ध्यान दें कि कोड को देख रहा है JInternalFrame.setSelected(boolean), सेट किए गए और "एक्टीवेशन" प्रक्रिया में एक साथ बंधे होते हैं, उस सेटलेक्टेड फायर में न केवल चयन के लिए संपत्ति में परिवर्तन होता है, बल्कि कॉल भी होता है fireInternalFrameEvent(InternalFrameEvent.INTERNAL_FRAME_ACTIVATED) भी।