2011-08-09 17 views
11
setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH); 
setResizable(false); 
setUndecorated(true); 
System.out.println("--------> "+getContentPane().getWidth()); //----> 0 why is this happening? 

मैं एक जेएफआरएएम का आकार निर्धारित करने की कोशिश कर रहा हूं। मैं गूगल पर खोज की है और प्रलेखन की जाँच की और मैं अभी भी क्यों यह काम नहीं करेगा पता नहीं है इस बारे में किसी भी अन्य नियंत्रण पर ठीक काम करता है मैं परजावा, जेएफआरएम: getWidth() रिटर्न 0

संपादित करें यह कोशिश की है: frame.getWidth() काम करता है जब कक्षा के बाहर बुलाया (कि JFrame फैली) अभी भी, अगर मैं

System.out.println("--------> "+getContentPane().getWidth()); 

की जगह

साथ
System.out.println("--------> "+this.getWidth()); 

getWidth अभी भी 0

012 वापस आ जाएगी

EDIT2: मुझे इसे दृश्यमान और सामान सेट करने से पहले फ्रेम के आकार की आवश्यकता है। मुझे फ्रेम में अन्य नियंत्रण जोड़ने की आवश्यकता है और उनके निर्देशांक और आकार फ्रेम के आकार पर निर्भर करते हैं।

+2

क्या फ्रेम दिखाई दे रहा है? – lhballoti

+0

सब कुछ इस बात पर निर्भर करता है कि आपने कंटेनर को कैसे रखा है, यदि 'setSize() 'या' setBounds()' के लिए परिभाषाएं हैं, तो कोई भी 'आयाम' रिटर्न केवल 'कंटेनर' दिखाई देता है, अन्यथा यदि 'जेकंपोनेंट्स' अपने 'प्रीपेर्ड साइज' को वापस लौटाता है 'कंटेनर', तो आप कहीं भी 0 आयाम' प्राप्त कर सकते हैं – mKorbel

+0

@ madflame991, अपने दूसरे संपादन में, यह संभव नहीं है, और न ही यह समझ में आता है। – mre

उत्तर

10

आपको 0 कारण क्यों मिला है क्योंकि आपने किसी भी पैक(), setSize (int, int) या setSize (आयाम) को कॉल नहीं किया है। यह केवल तभी होता है जब इन तरीकों में से किसी एक को कॉल किया जाए कि आपके फ्रेम का लेआउट गणना की जाएगी।

JFrame frame = new JFrame("My Frame"); 
frame.setExtendedState(getExtendedState()|JFrame.MAXIMIZED_BOTH); 
frame.setResizable(false); 
frame.setUndecorated(true); 
frame.pack(); // Important line!!! 
frame.setVisible(true); 
System.out.println("--------> "+getContentPane().getWidth()); 
+0

मुझे नियंत्रण जोड़ने से पहले चौड़ाई की आवश्यकता है – adrianton3

+1

मैं परीक्षण चलाता हूं और ऐसा लगता है कि आप फ्रेम चौड़ाई नहीं प्राप्त कर सकते हैं यह दिखाई नहीं दे रहा है, लेकिन मुझे एहसास हुआ कि यदि आपका फ्रेम हमेशा JFrame.MAXIMIZED_BOTH है, तो फ्रेम चौड़ाई स्क्रीन चौड़ाई के बराबर है, जिसे आप 'टूलकिट टीके = टूलकिट.getDefaultToolkit(); int screenWidth = tk.getScreenSize() चौड़ाई; ' – aymeric

+0

द्वारा प्राप्त कर सकते हैं! getScreenSize वह नहीं है जिसे मैं ढूंढ रहा था लेकिन यह मेरी समस्या को हल करता है – adrianton3

10

आपके पास (यानी setVisible(true)) JFrame अभी तक एहसास नहीं हुआ है। और इसलिए, इसका कोई आकार नहीं है क्योंकि उसने इसके घटकों को नहीं रखा है।

+2

1+। 'पैक()' जेएफआरएएम (मुझे विश्वास है) भी प्रस्तुत करेगा। –

+0

मैंने इसे दृश्यमान करने के बाद इसे कॉल करने का प्रयास किया और यह अभी भी 0 – adrianton3

+0

@ madflame991 लौटा, यह एक बेवकूफ सवाल हो सकता है, लेकिन क्या आपने इसे देखने के पहले 'JFrame' में कोई घटक जोड़ा था? और जैसा कि @ होवरक्राफ्ट ने उल्लेख किया है, शायद 'पैक()' का आह्वान करना बेहतर विकल्प है, क्योंकि यह कंटेनर को इसके घटकों को लेआउट करने के लिए मजबूर करेगा और फिर स्वयं को दिखाई देगा। – mre

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