SWT: تخطيطات متداخلة مع ScrolledComposite يتجاوز المساحة المتاحة

StackOverflow https://stackoverflow.com/questions/961545

سؤال

أريد إنشاء تخطيط تفصيلي للماجستير لأحد تطبيقاتي باستخدام SWT.

الحاوية والمحتوى الجانبي والجزء 1 هي مثيلات مركبة. التمرير هو scrolledcomposite

التصميم المطلوب هو شيء مثل:

+--Container-------------------------------------+
|+--Content----------------------++--Sidebar----+|
||                               ||+--Part1----+||
||                               |||           |||
||                               |||           |||
||                               |||           |||
||                               |||           |||
||                               |||           |||
||                               ||+-----------+||
||                               ||+--Scrolled-+||
||                               |||           |||
||                               |||           |||
||                               |||           |||
||                               |||           |||
||                               |||           |||
||                               ||+-----------+||
|+-------------------------------++-------------+|
+------------------------------------------------+

يجب على المحتوى الاستيلاء على جميع المساحة أفقيا وعموديا متاح.

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

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

لقد قمت الآن بتنفيذ هذا بالطريقة التالية:

  • حاوية لديها gridlayout مع 2 كولوم.

  • داخل أن المحتوى لديه سلوك Fill_Both والاستيلاء على جميع المساحات الأفقية / الرأسية الأفقية.

  • يحتوي الشريط الجانبي على Fillolayout (SWT.vertical) ويحتوي على Part1 و Chructed Chintss.

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

عندما أستخدم FillLayout (Swt.horizontal) للحاوية، فإن السلوك هو حسب الرغبة، حيث يوجد تمرير وكل شيء هو "حدود داخل".

هل هناك طريقة لتحقيق هذا السلوك أيضا عند استخدام Gridlayout لأنني أريد المحتوى للاستيلاء على معظم المساحة.

مرفق الاختبار الحالي SWT Snippet:

public class Scrolled {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new GridLayout(2,false));
        //shell.setLayout(new FillLayout(SWT.HORIZONTAL));

        Composite content = new Composite(shell, SWT.BORDER);
        content.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));

        Composite sidebar = new Composite(shell, SWT.BORDER);
        sidebar.setLayout(new FillLayout(SWT.VERTICAL));
        sidebar.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));

        Composite cc = new Composite(sidebar, SWT.BORDER);

        ScrolledComposite sc = new ScrolledComposite(sidebar, SWT.BORDER
                | SWT.V_SCROLL | SWT.H_SCROLL);
        sc.setLayout(new GridLayout(1,true));

        Composite c = new Composite(sc, SWT.NONE);
        c.setSize(400, 400);
        c.setLayout(new GridLayout(1, true));

        for(int i = 0; i < 1000; i++){
            new Button(c, SWT.PUSH).setText("Text");
        }

        sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));
        sc.setContent(c);
        sc.setExpandHorizontal(true);
        sc.setExpandVertical(true);
        sc.setAlwaysShowScrollBars(true);

        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}
هل كانت مفيدة؟

المحلول

يبدو أنني وجدت الحل.

يبدو أن هذا هو الحال الذي يجب أن يأخذه المركب GRAB_EXCESS_VERTICAL أن تقتصر على العرض المتاح. وإلا يتم تعيين المكون الطول المفضل الذي هو أقصى ارتفاع لعرض الكل مرة واحدة.

تغييرات التعليمة البرمجية التالية فعلت الخدعة:

content.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));

sidebar.setLayoutData(new GridData(SWT.FILL,SWT.FILL,false,true));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top