2010-06-08 4 views
6

जबकि मेरा स्विंग ऐप चल रहा है, मैं स्क्रीन के आकार को बदलता हूं (उदा। 1024x768 से 800x600 तक)।स्क्रीन आकार बदलने के बारे में एक स्विंग ऐप को कैसे जागरूक किया जाए?

क्या कोई घटना है जिसके बारे में मुझे अधिसूचित किया जा सकता है?

वैकल्पिक रूप से मैं प्रत्येक दो सेकंड में स्क्रीन आकार की जांच कर सकता हूं, लेकिन Toolkit.getScreenSize() मुझे पुराना मान बताता रहता है।
परिवर्तन के बाद वास्तविक स्क्रीन आकार कैसे प्राप्त किया जा सकता है?

पर्यावरण: लिनक्स

(SuSE ES 11 और Ubuntu 9.04 पर परीक्षण) मैं तुम्हारी मदद की सराहना करते हैं।
मार्टन

उत्तर

2

निम्नलिखित मेरे लिए काम किया है, लेकिन मैं किसी Mac हूँ, इसलिए मुझे यकीन है कि के लिए नहीं कह सकता कि यह लिनक्स पर काम करेगा:

System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth() + "x" + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight()); 

//Ignore this block, it was simply to give me a chance to change my resolution 
Scanner readUserInput=new Scanner(System.in); 
System.out.println("Waiting on input, go change your resolution"); 
String myName=readUserInput.nextLine(); 

System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth() + "x" + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight()); 

निर्गम (blah वास्तव में इनपुट है) के रूप में था इस प्रकार है:

1440x900 
Waiting on input, go change your resolution 
blah 
1280x960 

जाहिर है यदि आप कई स्क्रीन उपकरणों है, तो आप अधिक से अधिक सावधानी बरतें करना होगा।

1

प्रदर्शन आकार की गणना करने के लिए, आप उपयोग कर सकते हैं (GraphicsConfiguration जावाडोक से लिया)

Rectangle virtualBounds = new Rectangle(); 
    GraphicsEnvironment ge = GraphicsEnvironment. 
      getLocalGraphicsEnvironment(); 
    GraphicsDevice[] gs = 
      ge.getScreenDevices(); 
    for (int j = 0; j < gs.length; j++) { 
     GraphicsDevice gd = gs[j]; 
     GraphicsConfiguration[] gc = 
      gd.getConfigurations(); 
     for (int i=0; i < gc.length; i++) { 
      virtualBounds = 
       virtualBounds.union(gc[i].getBounds()); 
     } 
    } 

फिर आप width और virtualBounds की height क्वेरी कर सकते हैं।

यह बहु-मॉनीटर सेटअप में भी काम करेगा।

जहां तक ​​मुझे पता है, परिवर्तनों का पता लगाने के लिए कोई जेडीके समर्थित तरीका नहीं है, इसलिए मतदान केवल एकमात्र शर्त है, या JNA और मूल कोड का उपयोग करें। यदि आपकी शीर्ष-स्तरीय विंडो को अधिकतम किया गया है, तो डिस्प्ले का आकार बदलने से किसी भी अधिकतम विंडो का आकार बदल जाएगा, ताकि आप वहां भी बदलावों को सुन सकें। घटक श्रोताओं को लिखने के उदाहरणों के लिए यह sun tutorial देखें।

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

+0

त्वरित उत्तर के लिए धन्यवाद। दुर्भाग्यवश उपरोक्त स्निपेट उबंटू 9.04 पर पुराने आकार (1024x768) को प्रदर्शित करता रहता है। सर्वश्रेष्ठ संबंध, मार्टन –

+0

यह अजीब बात है, क्योंकि संक्षेप में यह स्वीकृत उत्तर के समान एपीआई का उपयोग करता है। – mdma

+0

हां, यह अजीब बात है कि ग्राफिक्स कॉन्फ़िगरेशन .getBounds() अनुचित मूल्य देता है, जबकि GraphicsDevice.getDisplayMode() अच्छा देता है। दूसरी तरफ GraphicsDevice.getDisplayMode() हेवीवेट के लिए प्रतीत होता है, इसलिए इसे हर कुछ सेकंड में प्रदर्शन करना सबसे अच्छा विचार नहीं हो सकता है। मुझे इसके बजाय एक मूल कॉल चुनना पड़ सकता है। –

-1

आयाम स्क्रीनसाइज = Toolkit.getDefaultToolkit()। GetScreenSize();

f.setSize (screenSize.width, screenSize.height);

+0

यह सवाल का जवाब नहीं देता है। – vektor

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