سؤال

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

    JPanel sideBar = new JPanel();
    sideBar.setBounds(0, 0, 180, (int)this.getBounds().getHeight());
    sideBar.setLayout(new GridBagLayout());


    JPanel optionBar = new JPanel();
    optionBar.setBorder(BorderFactory.createTitledBorder("Box1"));
    optionBar.setLayout(new GridBagLayout());


    JPanel buttonBar = new JPanel();
    buttonBar.setBorder(BorderFactory.createTitledBorder("Options"));
    buttonBar.setLayout(new GridBagLayout());


    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.ipady = 5;
    c.insets = new Insets(10,0,0,0);


    JButton simplify;
    simplify = new JButton("Open");
    simplify.addActionListener( this.listener );
    c.gridy = 0;
    buttonBar.add(simplify, c);

    JButton mergeButton;
    mergeButton = new JButton("Close");
    mergeButton.addActionListener( this.listener );
    c.gridy = 1;
    buttonBar.add(mergeButton, c);

    JButton splitButton;
    splitButton = new JButton("Merge");
    splitButton.addActionListener( this.listener );
    c.gridy = 2;
    buttonBar.add(splitButton, c);

    c.insets = new Insets(0,5,5,5);
    c.gridy = 0;
    sideBar.add(optionBar, c);

    c.gridy = 1;
    c.ipadx = 70;
    sideBar.add(buttonBar, c);

    return(sideBar);
هل كانت مفيدة؟

المحلول

لن تخصص Gridbaglayout مساحة رأسية كافية فقط يتطلب مكون، مما يترك الباقي فارغا. أتوقع أن ترى مكونات الشريط الجانبي تركزت عموديا؟

من أجل "دفع" المكونات خارج، تحتاج إلى تعيين وزن رأسي. إذا قمت بتعيين weighty القيد إلى 1.0 في مكونك الأخير، وسوف يستغرق جميع المساحة الرأسية المتبقية لهذا المكون ودفع الباقي إلى الأعلى. (قد تحتاج أيضا إلى مرساة تلك اللوحة الأخيرة GridBagConstraints.NORTH).

يحاول c.weighty = 1.0 قبل sideBar.add(buttonBar, c);

نصائح أخرى

إذا كنت على دراية / أكثر راحة مع HTML، فيمكنك استخدامها Table2Gridbag.. وبعد إنها أداة وحدة التحكم الصغيرة التي تأخذ وصف تخطيط (جدول HTML) وترجم ذلك إلى وصف تخطيط مكافئ لتكوين مدير Gridbaglayout

الرمز الذي لدي يضعها في منتصف الطريق إلى أسفل الشريط الجانبي بدلا من الأعلى.

حسنا، تحتاج إلى البدء من خلال قراءة Swing Tutorial. لمعرفة كيفية استخدام مديري التخطيط بشكل صحيح. BoxLayout أسهل بكثير من Gridbaglayout لأنك لا تضطر إلى تعلم كيفية تحديد القيود. ولكن إذا كنت ترغب في استخدام Gridbaglayout، فاقرأ القسم على "كيفية استخدام Gridbaglayout". قد ترغب في التركيز على القسم الذي يتناول القيود "WoodoX والوزن". بناء على معرفتي المحدودة التي يجب أن تساعد في حل المشكلة.

أيضا، عند استخدام مديري التخطيط، لا تستخدم SetBounds () أو إعداد ().

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