2015-02-05 5 views
6

नहीं है, मैं एक जीयूआई में कुछ टेक्स्ट रखना चाहता हूं, और मैं uicontrol प्रकार 'text' के सटीक आकार को जानना चाहता हूं!टेक्स्ट 'एक्स्टेंट' संपत्ति में सही आकार

मैं कई धागे समझा यह एक ही पाठ वाली एक 'text' वस्तु की 'Extent' संपत्ति का उपयोग कर किया जा सकता है कि मिल गया है, उदाहरण देखें:

function form = tempfunc(txt,font,fontsize) 
    if nargin <3 
     fontsize = 10; 
    end 
    if nargin < 2 
     font = 'courier'; 
    end 
    f = figure('Visible','off','Units','pixels'); 
    u = uicontrol(f,'Style','text','Units','pixels','String',txt,'FontName',font,'FontSize',fontsize); 
    textsize = get(u,'Extent'); 
    textsize = textsize(3:4); 
    close(f); 

    form = figure('Units','pixels'); 
    uicontrol(form,'Style','text','Units','pixels','String',txt,'FontName',font,'FontSize',fontsize,'Position',[5,5,textsize]); 
end 

मेरे समस्या अब है कि यह काम नहीं करता। जब मैं tempfunc(repmat('A',14)); साथ ऊपर चलाने मैं निम्न चित्र खिड़की मिलती है:

enter image description here

आप देख सकते हैं पाठ textsize चर में निकाले की ऊंचाई छवि से बहुत छोटा है!

ध्यान दें कि यह परिणाम तब हुआ जब मैंने अपने विंडोज कंप्यूटर पर मैटलैब आर2014 ए पर प्रोग्राम चलाया। बाद में मैंने एक लिनक्स मशीन पर एक ही कोड चलाया जो मैटलैब आर2013 बी चला रहा था, और उस मशीन पर मुझे वह परिणाम मिला जो मैं चाहता था।

मैं जो जीयूआई कर रहा हूं उसे (किसी भी कंप्यूटर पर चलाने में सक्षम होना चाहिए), लेकिन अभी मैं वास्तव में किसी नुकसान पर एक संस्करण बनाने के लिए आगे बढ़ना चाहिए, इसलिए कृपया मेरी मदद करें!

संपादित करें: मैं एक विंडोज 7 मशीन पर एक ही कोड (इस समय परम मेरी उद्यम संस्करण के बजाय संस्करण) मैटलैब R2011b (बजाय मेरी R2014a का) चल रहा भागने की कोशिश की, यह अभी भी की गलत ऊंचाई का उत्पादन पाठ बॉक्स - लेकिन इस बार पाठ बॉक्स बहुत अधिक थी - छवि देखें:

enter image description here

EDIT2: मैं अंत में मिला R2014b स्थापित है, लेकिन दुर्भाग्य से यह मदद नहीं की! - उन्होंने ऐसा नहीं किया

enter image description here

मैं भी अगर मेरी स्क्रीन के संकल्प के विभिन्न विकल्पों किसी भी फर्क पड़ा देखने के लिए करने की कोशिश की: मैं एक समान दिखने वाले चित्र मिला है।

EDIT3:

मैंने देखा है कि अलग अलग फोंट ऊंचाई में विभिन्न त्रुटियों उपज है, उदा डिफ़ॉल्ट फ़ॉन्ट (एमएस सैन्स सेरिफ) एक टेक्स्ट बॉक्स उत्पन्न करता है जो बहुत अधिक होता है (और ऊंचाई में यह त्रुटि भी बढ़ जाती है क्योंकि अधिक लाइनें जुड़ती हैं) - लिनक्स पर हालांकि मैंने कोशिश किए गए सभी फ़ॉन्ट्स के लिए सही परिणाम प्राप्त किया।

लेकिन वास्तव में जिस मामले में मुझे सबसे ज्यादा दिलचस्पी है वह कूरियर फ़ॉन्ट का उपयोग कर रहा है, क्योंकि मुझे अपने उद्देश्य के लिए एक मोनोस्पेस्ड फ़ॉन्ट चाहिए।

+0

मेरे पास R2014b, उबंटू 14.04 के तहत सही व्यवहार है। चूंकि उन्होंने R2014b के लिए गहराई में ग्राफिकल प्रतिपादन को बदल दिया है, ऐसा लगता है कि इस तरह की समस्या अब तय की गई है। – Ratbert

+0

मुझे लगता है कि यह सिर्फ इसलिए है क्योंकि यह लिनक्स है, जब मैंने R2014b स्थापित किया था तो इससे कुछ भी मदद नहीं मिली। –

+0

मैं पुष्टि करता हूं कि मैं इस समस्या को R2014b और R201b में देखता हूं, दोनों विंडोज –

उत्तर

1

चीजों के जावा पक्ष अवलोकन, Swing घटकों ब्याज के कई तरीके हैं:

(जो, मेरे परीक्षणों से, करने के लिए तुलनीय परिणाम देता है)

बात यह है कि "पसंदीदा आकार" सही आकार लगता है (whic - इस घटक के के चौराहे

getVisibleRect()

घटक की 'दिखाई आयत "रिटर्न: ज आप की तलाश), आकार get(...,'Extent'); द्वारा दिया जबकि दिखाई आकार है, जो निम्नलिखित अर्थ होता है दृश्य आयताकार, नया आयताकार (0, 0, getWidth(), getHeight()), और अपने सभी पूर्वजों के दृश्य आयताकार। इसके दिखाई आकार आंकड़ा विंडो के theme- और प्लेटफ़ॉर्म-विशिष्ट सजावट घटक के उपलब्ध स्थान कम हो सकती है, और इसलिए (के रूप में उल्लेख here):

ऊपर स्पष्ट करने के लिए।

एक संख्यात्मक उदाहरण के रूप में, जब डिफ़ॉल्ट सेटिंग्स और repmat('A',14) के साथ चल रहा है, मैं (Win7, MATLAB 2015a पर) मिलती है:

  • get(u,'Extent') - [0,0,116,214]
  • jHandle.getVisibleRect-java.awt.Rectangle[x=0,y=0,width=116,height=214]
  • jHandle.getSize-java.awt.Dimension[width=116,height=214]
  • jHandle.getPreferredSize - java.awt.Dimension[width=116,height=221]

अब सवाल PreferredSize (या jHandle जिसमें से यह पुनर्प्राप्त किया जा सकता है) सुविधा ...

एक विकल्प प्राप्त करने के लिए है, जो मैं करता था, findjobj उपयोगिता, जिसका उपयोग jHandle = findjobj(u) के रूप में सरल है है।

संक्षेप में:

  1. प्लेस findjobj अपने काम फ़ोल्डर में।
  2. दो पंक्तियों जहाँ आप इस से textsize खोजने के बदले:

    वी = findjobj (यू); textsize = [v.getPreferredSize.getWidth v.getPreferredSize.getHeight];

  3. लाभ।

पीएस

मेरा तर्क गलत साबित हो सकता है और स्विंग गलत समझ सकता है, हालांकि यह स्पष्टीकरण मुझे और अधिक महत्वपूर्ण रूप से समझ में आता है - यह काम करता है।

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