سؤال

وكيف يمكنني جعل الجانب مكان زر إلى جنب. أنا استخدم gridBagLayout لتصميم مشكلة layout.The هي أن المكان زر بعيدة جدا عن بعضها البعض. لقد حاولت أن اختيار CENTER كما مرساة ولكن هذا يجعل الزر التداخل. إذا كنت الغرب والشرق، وضعت زر بعيدة جدا عن بعضها البعض.

ومنها مثلا. SAVE ---------- نمط جديد بدلا من SAVE NEW_PATTERN.

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=1;
con.gridy=3; con.gridx=0;
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);
هل كانت مفيدة؟

المحلول

وبفضل AKF، لقد حل المشكلة عن طريق وضع flowLayout داخل gridBagLayout.

....
JButton bSave = new JButton("Save");
JButton bPattern = new JButton("New Pattern");
JPanel pContainer = new JPanel();
pContainer.setLayout(new FlowLayout(FlowLayout.CENTER));
pContainer.add(bSave); pContainer.add(bPattern); 
con = new GridBagConstraints();
con.anchor=GridBagConstraints.CENTER;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
m.setConstraints(pContainer, con);
c.add(pContainer);
....

نصائح أخرى

وGridBagLayout هو الأكثر تعقيدا من التخطيطات. إذا كنت مجرد التوفيق بين اثنين من الأزرار، وأود أن أوصي باستخدام FlowLayout (الافتراضي) أو BoxLayout. ولكن، إذا كنت ترغب في استخدام GridBagLayout، بدلا من تعديل مرساة، وضبط gridx أن تكون 1 للزر الثاني. أيضا، لا يدري لماذا لديك gridy من 3 بدلا من gridy 0 (ما لم يكن هناك رمز آخر لديك أغفل أن الاستخدامات gridy 0-2).

لماذا لا تقرأ الإعلانات القديمة أولا قبل نشر الأسئلة الجديدة؟

وأنت حيث تعطى رابط لسوينغ تعليمي في نشر الاخيرة. حتى قراءة البرنامج التعليمي، ومحاولة الخروج من الأمثلة واستخدام مدير التخطيط المناسب أو مجموعة من مديري التخطيط لهذا المنصب.

وبدلا من GridBagLayout، GridLayout هو الحل بسيط. فمن السهل اقامة:

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
JPanel panel = new JPanel(new GridLayout(1,2); // 1 row, 2 cols
panel.add(bSave);
panel.add(bPattern);

وتحرير:

وفقط من باب الفضول، وكنت العبث مع الأصلي الخاص بك والعثور على مجموعة التي تسمح للاستخدام فقط GridBagLayout. فإنه ليس من الكثير يختلف عن الأصلي الخاص بك:

GridBagConstraints con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3;
con.gridx = 0;                   
con.gridwidth = 1; 
con.gridheight = 1;          
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=0;
con.gridy=3;
con.gridx=1;//this is the big diff!
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);

وهذا الرمز وضعه الجانب أزرار إلى جنب في وسط الشاشة.

ومفتاح هي:

وconstraints.fill = GridBagConstraints.NONE؛ -> جعل butons عدم توسيع

وconstraints.insets.right = 0؛ -> يجعل أزرار تقف جنبا إلى جنب

وconstraints.insets.left = 0؛ -> يجعل أزرار تقف جنبا إلى جنب

وconstraints.weightx = 1 -> يجعل الخلية في اللي تبونه الأزرار expando أفقيا

وconstraints.anchor = GridBagConstraints.EAST؛ -> يجعل الزر الأيسر للوقوف في الخلية

وconstraints.anchor = GridBagConstraints.WEST؛ -> يجعل الزر الأيمن للوقوف على الجهة اليسرى من الخلية

public static void main(String args[]){
        JFrame frame=new JFrame();
        Container cont=frame.getContentPane();
        cont.setLayout(new GridBagLayout());

        GridBagConstraints constraints=new GridBagConstraints();
        constraints.insets.top=2;
        constraints.insets.bottom=2;
        constraints.insets.left=0;// increment to separate buttons
        constraints.insets.right=0;// increment to separate buttons
        constraints.fill=GridBagConstraints.NONE;
        constraints.weightx=1;
        constraints.gridy=0;

        constraints.anchor=GridBagConstraints.EAST;
        constraints.gridx=0;
        cont.add(new JButton("Save"),constraints);

        constraints.anchor=GridBagConstraints.WEST;
        constraints.gridx=1;
        cont.add(new JButton("New Pattern"),constraints);

        frame.pack();
        frame.setVisible(true);
    }

وأنا أقترح عليك قراءة البرنامج التعليمي لGridBagLayout لأنها من خارج منطقة الجزاء مدير التخطيط الأكثر تقدما ويجعل بعضها الآخر عفا عليها الزمن. أنها تستحق التعلم لتلك الأسباب. يجعل كل شيء بسيط إذا كنت تعتقد انه ما من الشبكة وكل ما عليك للحصول على الحق في ذلك الحين هو إحداثيات س وص وهو ما فاتك في التعليمات البرمجية. كنت هناك تقريبا:)

وخلط مديري التخطيط وعادة ما يكون فكرة سيئة للغاية لأنها كل عمل مختلفة قليلا عندما يتعلق الأمر ملء الحاويات مع مساحة إضافية.

وcamickr وبناء على تعليقي الناس يجب استخدام GridBagLayout لأنه هو الأكثر مرونة واحد، ويمكن استخدامها في أي حالة. يجب وجود واحد فقط يؤدي إلى بسيطة ويمكن للصيانة. وأود أيضا أن تجد أنه من السهل جدا لقراءة منذ أنه تم تعيينه منطقيا. وcontstraints تغيير فقط إذا كنت تستخدم القيود واحد يعترض لجميع المكونات، التي من الواضح انها فكرة سيئة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top