2012-08-13 9 views
5

कोड:setPreferredSize काम नहीं करता है

import java.awt.Dimension; 

import javax.swing.*; 

public class Game extends JFrame { 
    private static final long serialVersionUID = -7919358146481096788L; 
    JPanel a = new JPanel(); 
    public static void main(String[] args) { 
     new Game(); 
    } 
    private Game() { 
     setTitle("Insert name of game here"); 
     setLocationRelativeTo(null); 
     setLayout(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     a.setPreferredSize(new Dimension(600, 600)); 
     add(a); 
     pack(); 
     setVisible(true); 
    } 
} 

तो मैं 600 से 600 करने के लिए JPanel के पसंदीदा आकार सेट और फ्रेम पैक, लेकिन फ्रेम के आकार अभी भी 0 से 0.

क्यों है यह और मैं इसे कैसे ठीक करूं?

+2

देखें: [? क्यों इस पर सिकोड़ी है स्विंग में एक अशक्त लेआउट का उपयोग करने] (http://stackoverflow.com/questions/6592468/why-is- यह-पर-उपयोग-पर-उपयोग-ए-नल-लेआउट-इन-स्विंग) –

उत्तर

8

जैसा कि आपने कहा, pack() कोशिश करते हैं और इतना है कि हर घटक अपने preferredSize का आकार बदलकर खिड़की की व्यवस्था करेगा।

समस्या यह है कि ऐसा लगता है कि लेआउट प्रबंधक घटक और उनके संबंधित पसंदीदा आकारों की व्यवस्था करने का प्रयास कर रहा है। हालांकि, जैसा कि आप लेआउट मैनेजर को शून्य के रूप में सेट करते हैं, उसके प्रभारी कोई भी नहीं है।

setLayout(null) लाइन पर टिप्पणी करने का प्रयास करें, और आप परिणाम देखेंगे। बेशक, एक पूर्ण खिड़की के लिए, आपको एक सार्थक LayoutManager चुनना और सेट करना होगा।

यह मेरे लिए ठीक काम करता है:

import java.awt.Dimension; 

import javax.swing.*; 

public class Game extends JFrame { 
    private static final long serialVersionUID = -7919358146481096788L; 
    JPanel a = new JPanel(); 
    public static void main(String[] args) { 
     new Game(); 
    } 
    private Game() { 
     setTitle("Insert name of game here"); 
     setLocationRelativeTo(null); 
     //setLayout(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     a.setPreferredSize(new Dimension(600, 600)); 
     add(a); 
     pack(); 
     setVisible(true); 
    } 
} 
+0

आह, यह काम करता है, धन्यवाद :) – Doorknob

2

pack() बच्चे की उस पर पैरेंट कंटेनर के पसंदीदा आकार प्रश्नों ताकि आप का उपयोग करना होगा:

setPreferredSize(new Dimension(600, 600)); 

एक और टिप्पणी है कॉल करने के लिए

setLocationRelativeTo(null); 

के बाद pack() को बुलाया गया है केंद्र समन्वय की गणना करें :)

ठीक है, बस वहां शून्य शून्य लेआउट देखा गया है, क्यों JFrame के डिफ़ॉल्ट सीमा सीमा का उपयोग नहीं करते?

+0

ठीक है धन्यवाद जो काम करता है, लेकिन अब जो भी मैं जेपीनल में जोड़ता हूं वह प्रकट नहीं होता है! – Doorknob

+0

अनुक्रम बदलने के लिए कहने के लिए – Reimeus

+1

+1 से ऊपर मेरा अपडेट देखें, जिसमें कॉल किए जा रहे हैं। सबसे पहले 'JFrame' में घटक जोड़ें, ताकि इसका आकार समझा जा सके, फिर उसके आकार के सापेक्ष स्क्रीन पर इसकी स्थिति का मार्गदर्शन करें, और उसके बाद इसे दृश्यमान पर सेट करें। अच्छा दृष्टिकोण :-) –

2

आपकी समस्या, setLayout(null) है becase डॉक्स pack() के लिए कहते हैं:

कारण इस विंडो को कोई लेआउट यह होता है के साथ

इस प्रकार वांछित माप और उसके उप-घटक के लेआउट फिट करने के लिए आकार होने के लिए सही ढंग से निष्पादित नहीं करें।

यह मेरे लिए ठीक काम करने के लिए लगता है:

import java.awt.Dimension; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Game extends JFrame { 

    JPanel panel = new JPanel(); 

    private void createAndShowGUI() { 
     setTitle("FrameDemo"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     panel.setPreferredSize(new Dimension(600, 600)); 
     add(panel); 

     //setLayout(null); //wont work with this call as pack() resizes according to layout manager 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new Game().createAndShowGUI(); 
      } 
     }); 
    } 
}