2011-11-19 15 views
25

मेरे कोड काम नहीं करता:जावा स्विंग में विशिष्ट विंडो (फ्रेम) आकार कैसे सेट करें?

JFrame frame = new JFrame("mull"); 

mull panel = new mull(); 

// add panel to the center of window 
frame.getContentPane().add("Center", panel); 
frame.setSize(500, 300); // << not working!!! 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.pack(); // give a suitable size to window automatically 
frame.setVisible(true); // make window visible 

मैं बहुत छोटी सी खिड़की हो रही है। इसे कैसे जोड़ेंगे?

+1

* "जावा स्विंग में विशिष्ट विंडो (फ्रेम) आकार कैसे सेट करें?" * यह अधिक आम है कि आप फ्रेम के सामग्री फलक के पसंदीदा आकार को सेट करना चाहते हैं, या शायद सामग्री फलक में एक घटक सेट करना चाहते हैं । यह जानने के लिए कि फ्रेम को स्वयं कितना बड़ा बनाना है, और इससे सामग्री को व्यवस्थित करने या प्रस्तुत करने के लिए, परेशानियों से भरा हुआ है। –

उत्तर

47

ठीक है, आप frame.setSize() और frame.pack() दोनों का उपयोग कर रहे हैं।

आपको एक समय में उनमें से एक का उपयोग करना चाहिए।

setSize() का उपयोग करके आप अपने इच्छित फ्रेम का आकार दे सकते हैं, लेकिन यदि आप pack() का उपयोग करते हैं, तो यह स्वचालित रूप से फ्रेम के आकार को इसके घटकों के आकार के अनुसार बदल देगा। यह आपके द्वारा पहले वर्णित आकार पर विचार नहीं करेगा।

अपने कोड से frame.pack() को हटाने या आकार को सेट करने से पहले इसे रखने का प्रयास करें और फिर इसे चलाएं।

+2

धन्यवाद! इसने काम कर दिया! –

+1

आपका स्वागत है! :) – gprathour

+4

'सेट आकार() 'से पहले' पैक()' ले जाएं लेकिन ** ** इसे हटाएं नहीं! जीयूआई के सही लेआउट के लिए 'पैक()' (फ्रेम) या 'मान्य()' (एप्लेट) के लिए एक कॉल आवश्यक है। या बेहतर अभी भी, फ्रेम में कुछ सामग्री जोड़ें ताकि लेआउट प्रबंधक काम कर सकें * पैक होने पर * कितना बड़ा होना चाहिए (और आकार, पसंदीदा आकार, अधिकतम या संभवतः यहां तक ​​कि न्यूनतम आकार को सेट करने के लिए किसी भी कॉल को हटाएं)। -1 –

8

अधिकांश लेआउट प्रबंधक एक घटक के पसंदीदा आकार के साथ सबसे अच्छा काम करते हैं, और अधिकांश जीयूआई उन घटकों को अनुमति देते हैं जो उनके सामग्री या गुणों के आधार पर अपने पसंदीदा आकार सेट करने के लिए होते हैं। इन लेआउट प्रबंधकों को उनके सर्वोत्तम लाभ के लिए उपयोग करने के लिए, अपने शीर्ष स्तर के कंटेनर जैसेपर कॉल करें जैसे कि आपके जेएफआरम्स उन्हें दृश्यमान बनाने से पहले यह इन प्रबंधकों को उनके कार्यों को करने के लिए बताएगा - उनके घटकों को लेआउट करने के लिए।

अक्सर जब मुझे अपने घटकों में से किसी एक के आकार को स्थापित करने में अधिक प्रत्यक्ष भूमिका निभाने की आवश्यकता होती है, तो मैं getPreferredSize को ओवरराइड कर दूंगा और इसे एक आयाम वापस कर दूंगा जो super.preferredSize (या यदि नहीं तो यह सुपर के मूल्य देता है)।

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class MoveRect extends JPanel { 
    private static final int RECT_W = 90; 
    private static final int RECT_H = 70; 
    private static final int PREF_W = 600; 
    private static final int PREF_H = 300; 
    private static final Color DRAW_RECT_COLOR = Color.black; 
    private static final Color DRAG_RECT_COLOR = new Color(180, 200, 255); 
    private Rectangle rect = new Rectangle(25, 25, RECT_W, RECT_H); 
    private boolean dragging = false; 
    private int deltaX = 0; 
    private int deltaY = 0; 

    public MoveRect() { 
     MyMouseAdapter myMouseAdapter = new MyMouseAdapter(); 
     addMouseListener(myMouseAdapter); 
     addMouseMotionListener(myMouseAdapter); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if (rect != null) { 
     Color c = dragging ? DRAG_RECT_COLOR : DRAW_RECT_COLOR; 
     g.setColor(c); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.draw(rect); 
     } 
    } 

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

    private class MyMouseAdapter extends MouseAdapter { 

     @Override 
     public void mousePressed(MouseEvent e) { 
     Point mousePoint = e.getPoint(); 
     if (rect.contains(mousePoint)) { 
      dragging = true; 
      deltaX = rect.x - mousePoint.x; 
      deltaY = rect.y - mousePoint.y; 
     } 
     } 

     @Override 
     public void mouseReleased(MouseEvent e) { 
     dragging = false; 
     repaint(); 
     } 

     @Override 
     public void mouseDragged(MouseEvent e) { 
     Point p2 = e.getPoint(); 
     if (dragging) { 
      int x = p2.x + deltaX; 
      int y = p2.y + deltaY; 
      rect = new Rectangle(x, y, RECT_W, RECT_H); 
      MoveRect.this.repaint(); 
     } 
     } 
    } 

    private static void createAndShowGui() { 
     MoveRect mainPanel = new MoveRect(); 

     JFrame frame = new JFrame("MoveRect"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

ध्यान दें कि अपने मुख्य वर्ग एक JPanel है, और मैं ओवरराइड कि JPanel के getPreferredSize:

उदाहरण के लिए, यहाँ है कि मैं another question on this site के लिए बनाई गई एक छोटी सी खींचें एक आयत अनुप्रयोग है

public class MoveRect extends JPanel { 
    //.... deleted constants 

    private static final int PREF_W = 600; 
    private static final int PREF_H = 300; 

    //.... deleted fields and constants 

    //... deleted methods and constructors 

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

भी ध्यान रखें कि जब मैं अपने जीयूआई प्रदर्शित करते हैं, मैं इसे एक JFrame में जगह, JFrame पर pack(); कहते हैं, अपनी स्थिति को निर्धारित करते हैं, और फिर मेरी JFrame पर setVisible(true); फोन:

private static void createAndShowGui() { 
     MoveRect mainPanel = new MoveRect(); 

     JFrame frame = new JFrame("MoveRect"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 
संबंधित मुद्दे