سؤال

في تطبيق واجهة المستخدم الرسومية الخاصة بي ، لدي العديد من jpanels التي تم إنشاء مثيل لها في نقاط مختلفة أثناء إدارة برنامجي ، وستتسبب بعض الإجراءات في عرض أحدها في جزء التمرير:

mViewport.setViewportView(currentPanel);

المشكلة هي أن لوحاتي تتم باستخدام تخطيطات أكياس الشبكة ، وسلوك ذلك هو أن يركز نفسه داخل JScrollpane الموجودة بداخله. هذا يجعل واجهة المستخدم الرسومية تبدو غريبة.

هل يعرف أي شخص طريقة لإجبار لوحة تخطيط حقيبة الشبكة على محاذاة أعلى اليسار؟

شكرًا!


تعديل

لاحظ أنه هنا أسأل عن محاذاة اللوحة بأكملها داخل جزء التمرير الخاص بها ، وليس حول المكونات داخل اللوحة.

هل كانت مفيدة؟

المحلول 2

لقد وجدت حلاً لسؤالي الخاص بعد بعض العبث:

يبدو أن تحديد الأوزان قادر على التأثير على محاذاة المكونات داخل JPanel التي GridBagLayout كان مستعملا. ومع ذلك ، لم يكن له تأثير على محاذاة JPanel في حدود JScrollPane.

لقد وجدت حلاً بسيطًا إلى حد ما ليس ضع ال JPanel مباشرة داخل JScrollPane, ، كما كنت أفعل مع الكود السابق:

if (currentPanel != mCurrentPanel)
{
    mViewport.setViewportView(currentPanel);
}

... ولكن بدلاً من ذلك لوضع "خارجي" JPanel داخل JScrollPane, وضبط ذلك لاستخدام أ FlowLayout. ثم عندما أرغب في تبديل الألواح ، أقوم بإزالة القديم وأضع اللوحة داخل اللوحة "الخارجية".

if (currentPanel != mCurrentPanel)
{
    if (mCurrentPanel != null)
    {
        mOuterPanel.remove(mCurrentPanel);
    }
    mCurrentPanel = currentPanel;
    mOuterPanel.add(mCurrentPanel);
}

لقد نجح هذا النهج جيدًا ، لأنه يعني أنه كان علي فقط أن يؤثر على التغييرات في فصل واحد ، بدلاً من كل من اللوحات العديدة التي أمتلكها.

نصائح أخرى

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

إذا كنت ترغب في محاذاة المكونات الموجودة في الجزء العلوي الأيسر من جزء التمرير ، فقم بتعيين وزن المكون السفلي على 1.0 ، وضبط وزن المكون X الأكثر يمينًا على 1.0.

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