2012-03-02 11 views
8
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

class Demo 
{ 
    JFrame jf; 
    Demo() 
    { 
     jf=new JFrame("Demo"); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf.setSize(5000,5000); 
     jf.setVisible(true); 
     System.out.println(jf.getSize()); 
    } 
    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 

      @Override 
      public void run() 
      { 
       new Demo(); 
      } 
     }); 
    } 
} 

लिए काम नहीं करता मैं JFrame के लिए लेकिन यह है कि getSize रिटर्न अन्य आकार के बाद jf.setSize(5000, 5000) का उपयोग करें: java.awt.Dimension[width=1386,height=788] (अपनी स्क्रीन संकल्प 1366x768 है) मैं स्क्रीन आकार से अधिक फ्रेम आकार सेट कर सकते हैं? शायद इस तरह के व्यवहार कुछ फ्रेम गुणों के साथ प्रदान किया जाता है लेकिन मुझे उनके बारे में पता नहीं है।setSize() JFrame

+0

स्क्रीन से बड़ी खिड़की का इच्छित व्यवहार क्या है? – Thomas

+6

@ थॉमस - अंतिम उपयोगकर्ता को उत्साहित करते हुए, मुझे विश्वास है ... – mcfinnigan

+0

यह कोड सिर्फ मेरी लिनक्स मशीन – Robin

उत्तर

10

setSize के बजाय setPreferredSize का उपयोग करने का प्रयास करें। मेरे मामले में काम करता है (उबंटू 12.04 + गनोम 3)।

+0

सबसे कम, यानी सबसे अच्छा जवाब – jan

+0

यह हल हो गया। धन्यवाद! – anon58192932

3

मैं कॉल की कुछ संयोजनों बाहर की कोशिश की, और निम्न काम करने के लिए लग रहा था:

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
jf.setPreferredSize(new Dimension(5000,5000)); 
jf.setMaximumSize(new Dimension(5000,5000)); 
jf.setMinimumSize(new Dimension(5000,5000)); 
jf.pack(); 
jf.setVisible(true); 

यह अभी भी एक अलग आकार बाहर प्रिंट, लेकिन खिड़की से कहीं अधिक यह प्रिंट प्रतीत होता है।

+0

इस मामले में आकार बदल दिया गया है खिड़की के पहले चलने के बाद। प्रारंभ में खिड़की का आकार समान होता है। – eXXXXXXXXXXX2

+0

@eXXXXXXXXXXX दुर्भाग्यवश वह सबसे अच्छा था जो मैं कर सकता था। आप 'jf.setResizable (false) जोड़ने का प्रयास कर सकते हैं; '। – jjnguy

+0

सेटिंग प्रीफ़ और न्यूनतम प्लस फ्रेम "कम" फ्रेम को कम करने के लिए - उत्पादन के लिए कुछ भी नहीं, हालांकि, यह संभवत: अत्यधिक ओएस पर निर्भर करता है क्योंकि दस्तावेज के रूप में @Stephen C – kleopatra

7

जावाडोक इस कहते हैं:

"विधि ज्यामिति से संबंधित डेटा में परिवर्तन इसलिए, देशी विंडोइंग प्रणाली इस तरह के अनुरोध अनदेखा कर सकते हैं, या यह, का अनुरोध किया डेटा संशोधित कर सकते हैं ताकि खिड़की वस्तु। डेस्कटॉप सेटिंग में बारीकी से मेल खाने वाले तरीके से रखा और आकार दिया गया है। "

यह उस व्यवहार को शामिल करता है जिसे आप देख रहे/शिकायत कर रहे हैं।

यह क्रिस्टल स्पष्ट नहीं है, लेकिन एक कारण यह है कि Window.setSize(...) में यह व्यवहार है कि विंडो प्रबंधक (जावा के बाहर) आमतौर पर वीटो एप्लिकेशन ऐसा करने का प्रयास करता है। संभवतः, ऐसा इसलिए है क्योंकि यह दुरुपयोग के लिए खुला है और "उपयोगकर्ता क्या चाहता है" नहीं। वैसे भी, यह अंततः विंडो प्रबंधक के प्रतिबंधों को ओवरराइड करने के लिए आपके एप्लिकेशन की कॉल नहीं है।

4

बस शुक्रवार के लिए मज़ा (यानी, आपको उत्पादन वातावरण में कुछ भी नहीं करना चाहिए :-) - @ जिंगू कोड के साथ थोड़ा आगे खेलना, मैंने देखा कि फ्रेम को कम करने के बाद जीवन से बड़ा आकार का उपयोग किया गया था। तो प्रोग्राम के रूप में करने से यह शुरू

jf.setPreferredSize(new Dimension(5000,5000)); 
    jf.setMinimumSize(new Dimension(5000,5000)); 
    jf.pack(); 
    jf.setVisible(true); 
    jf.setState(Frame.ICONIFIED); 
    jf.setState(Frame.NORMAL); 
    System.out.println(jf.getSize()); 
1

ये मेरी टिप्पणियों कर रहे हैं (, इस्तेमाल किया 1.6 अब मैं XP के तहत 1.7 उपयोग कर रहा हूँ) से राक्षस के रूप में प्रकट करते हैं:

आप की असज्जित फ्रेम हो सकता है "लगभग" किसी भी आकार - मैं 1280x1024 (घुमावदार) के स्क्रीन रिज़ॉल्यूशन का उपयोग करता हूं और फ्रेम 1500x1500 के साथ किसी भी समस्या को नहीं देखा है, हालांकि कुछ फ्रेम 2000x2000 अपूर्ण (लेकिन काम) और 4000x4000 के फ्रेम को टास्कबार में अपना अंगूठा दिखाता है लेकिन यह अंगूठा निष्क्रिय है और फ्रेम खुद प्रकट नहीं होता है। मुझे लगता है कि अनावृत जेएफआरएएम का सबसे बड़ा संभव आकार सिस्टम क्षमताओं पर निर्भर है जो ग्राफिक हार्डवेयर पर निर्भर है।

सजाए गए फ्रेम के साथ एक साधारण कहानी है - वे स्क्रीन आकार (आमतौर पर कुछ पिक्सल से) से थोड़ा बड़ा हो सकते हैं।

क्रम के दौरान निर्धारित आकार के साथ अपने आवेदन में (जैसे खेल जहाँ आप बोर्ड आकार गतिशील रूप से सेट) मैं निम्नलिखित दृष्टिकोण का उपयोग करें:

1)। शून्य के सापेक्ष सेट फ्रेम स्थान पैकिंग से पहले। यह स्क्रीन के बीच में जेफ्रेम के ऊपरी-बाएं कोने को रखता है (जेएफआरएएम (0,0) आयाम पैक करने से पहले)

2)। मेरी फ्रेम सामग्री के पसंदीदा आकार सेट करें (मैं हमेशा एकल जेपीनल का उपयोग करता हूं) और उन्हें याद रखें

3)। फ्रेम पैक करें

4)।यदि पैक के बाद फ्रेम आकार फ्रेम से निपटने से पहले उनसे मेल नहीं खाते हैं, तो सामग्री के जेपीनल को हटाएं, जेपीसीलपैन को इस जेपीनल के साथ जोड़ें और JSCrollPane के पसंदीदा आकार जेपीनल पसंदीदा आकार के रूप में सेट करें जेएसक्रॉलबार निश्चित आयामों (यानी वर्टिकल स्क्रॉलबार की चौड़ाई) क्षैतिज की ऊंचाई)।

5)। फिर से पैक करें - यह केवल आवश्यक स्क्रॉलबार दिखाई देता है (यदि आप जेएफआरएएम आकार में वृद्धि नहीं करते हैं तो दोनों स्क्रॉलबार हमेशा दिखाई देंगे - JScrollPane डिफ़ॉल्ट सीमा को हटाने की भी आवश्यकता है)।

6)। फ्रेम के नए स्थान को इसे बाएं और ऊपर ले जाने के लिए इसी आकार के आधा भाग को केंद्र में सेट करके सेट करें।

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