簡體   English   中英

如何在gridlayout中使用滾動復合啟用滾動?

[英]How enable scroll using scroll composite in gridlayout?

如果我使用外殼,下面的代碼工作正常。 但我使用的復合材料無法正常工作。

如果使用shell,代碼可以正常工作:

   Display display = new Display ();
    Shell shell = new Shell (display);
    shell.setLayout(new GridLayout());  
    final ScrolledComposite sc = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    sc.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
    Composite c = new Composite(sc, SWT.NONE);
    c.setLayout(new GridLayout(10, true));
    for (int i = 0 ; i < 300; i++) {
        Button b = new Button(c, SWT.PUSH);
        b.setText("Button "+i);
    }
    sc.setContent(c);
    sc.setExpandHorizontal(true);
    sc.setExpandVertical(true);
    sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));
    sc.setShowFocusedControl(true);
    shell.setSize(300, 500);
    shell.open ();
    while (!shell.isDisposed ()) {
        if (!display.readAndDispatch ()) display.sleep ();
    }
    display.dispose ();

如果在gridlayout中使用Composite,則相同的代碼將無法正常工作:

   Display display = new Display ();
    Shell shell = new Shell (display);
    shell.setLayout(new GridLayout());
    Composite c1 = new Composite(shell, SWT.NONE);
    c1.setLayout(new GridLayout());
    final ScrolledComposite sc = new ScrolledComposite(c1, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);       
    sc.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
    Composite c = new Composite(sc, SWT.NONE);
    c.setLayout(new GridLayout(10, true));
    for (int i = 0 ; i < 300; i++) {
        Button b = new Button(c, SWT.PUSH);
        b.setText("Button "+i);
    }
    sc.setContent(c);
    sc.setExpandHorizontal(true);
    sc.setExpandVertical(true);
    sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));
    sc.setShowFocusedControl(true);
    shell.setSize(300, 500);
    shell.open ();
    while (!shell.isDisposed ()) {
        if (!display.readAndDispatch ()) display.sleep ();
    }
    display.dispose ();

您沒有告訴c1復合材料相對於其父級應該如何表現(即設置布局數據)。

您有兩種選擇:

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

要么

shell.setLayout(new FillLayout());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM