2012-11-22 11 views
5

मेरा उद्देश्य 600x600 के कंटेंटपैनल के साथ जेएफआरएम बनाना था और मैं चाहता था कि जेएफआरएएम पुनः आकार में न हो। इस बॉक्स के अंदर, मैंने यह सुनिश्चित करने के लिए 600x600 लाल-रूपरेखा आयताकार खींचा है कि जब मैं प्रोग्राम चलाता हूं तो सबकुछ मेल खाता है। JFrame के लिए आकार बदलने प्रतिबंधित करने से पहले, मैं ऐसा करके मेरी JFrame के आकार को निर्धारित:JFrame isResizable (false) आकार देने का मुद्दा

getContentPane().setPreferredSize(new Dimension(600,600)); 
pack(); 

और जब मैं शुरू की कार्यक्रम और मेरे आयत की सीमाओं JFrame के आयामों के साथ पूरी तरह से फिट। हालांकि, जब मैंने समीकरण में पुन: प्रयोज्य (झूठा) जोड़ा, तो मेरे आयत के दाहिने किनारे के साथ-साथ मेरे आयताकार के निचले किनारे के बीच पिक्सल का बफर होना प्रतीत होता था। थोड़ी सी परीक्षण और त्रुटि के साथ, ऐसा लगता है कि यह आवश्यक है (झूठा) ऊंचाई और चौड़ाई के लिए 10 पिक्सल जोड़ता है। (इसलिए सामग्री के लिए 590x590 का आयाम है + अतिरिक्त 10 मेरा कामकाज है)

मेरे प्रश्न यह क्यों हैं? मुझे कहीं भी अतिरिक्त 10 पिक्सल के बारे में कोई दस्तावेज नहीं मिल रहा है?

नोट: इस विसंगति को आकार को संशोधित किए बिना जेएफआरएएम बनाकर भी देखा गया था। इसे गैर-आकार देने योग्य बनाने के बिना, कोई अवलोकन करने योग्य पैनल/सामग्री नहीं है, लेकिन जब पुन: प्रयोज्य (झूठा) उपयोग किया जाता है, तो पैनल/फलक का दृश्य भाग होता है।

+0

के बाद क्या आप वाकई यह गैर आकार बदलने योग्य बनाने * पहले * पैक बुला? –

उत्तर

5

आप सही हैं, एक फ्रेम को गैर-अभ्यस्त करने के लिए सेट करना प्रतीत होता है कि इसकी ऊंचाई और चौड़ाई में 10 पिक्सल जोड़ना प्रतीत होता है, क्यों नहीं, मैं यह नहीं कह सकता कि यह मूल सहकर्मी को अद्यतन करने का दुष्प्रभाव प्रतीत होता है, हालांकि ...

आप इसे कॉल JFrame#pack द्वारा रीसेट कर सकते हैं बुला JFrame#setResizable

public class TestResizableFrame { 

    public static void main(String[] args) { 
     new TestResizableFrame(); 
    } 

    public TestResizableFrame() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new FixedPane()); 
       frame.setResizable(false); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class FixedPane extends JPanel { 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Dimension size = getSize(); 
      String text = size.width + "x" + size.height; 
      FontMetrics fm = g.getFontMetrics(); 
      int x = (getWidth()- fm.stringWidth(text))/2; 
      int y = ((getHeight() - fm.getHeight())/2) + fm.getAscent(); 
      g.drawString(text, x, y); 
      g.setColor(Color.RED); 
      g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); 
     } 

    } 

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