【问题标题】:How to get the scrollbars to work in a ScrolledComposite when using GridLayout?使用 GridLayout 时如何让滚动条在 ScrolledComposite 中工作?
【发布时间】:2016-09-13 06:58:48
【问题描述】:

我正在尝试让滚动合成具有固定大小的内容和可滚动内容的滚动合成显示状态信息下方的标签。由于我希望控件与父级一起调整大小,因此我在其父级上使用了 GridLayout。但是我遇到了滚动复合的滚动条和标签控件的定位问题。即,除非我将 scrolledcomposite 的网格数据属性设置为

,否则滚动不起作用
grabExcessVerticalspace = true

如果我允许 scrolledcomposite 抓取多余的垂直空间,由于它们之间的空间,标签不会出现在 scrolledcomposite 下方。

public class Snippet5 {

  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(1, true));

    // this button is always 400 x 400. Scrollbars appear if the window is
    // resized to be too small to show part of the button
    ScrolledComposite c1 = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    Button b1 = new Button(c1, SWT.PUSH);
    b1.setText("fixed size button");
    b1.setSize(400, 400);
    c1.setAlwaysShowScrollBars(true);
    c1.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, true));
    c1.setContent(b1);

    Label l = new Label(shell, SWT.BORDER);
    l.setText("button clicked");
    GridData layoutData = new GridData(SWT.LEFT, SWT.TOP, true, false);
    layoutData.heightHint = 30;
    layoutData.widthHint  = 400;
    l.setLayoutData(layoutData);

    shell.setSize(600, 300);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}

感谢任何帮助使标签恰好出现在滚动合成下方(修剪空间)并进行滚动工作。

编辑:

预期行为:

  1. 要被标签抓住的额外垂直空间。
  2. 在调整外壳大小时无法完全查看内容时,滚动复合应启用垂直滚动。

【问题讨论】:

    标签: java swt grid-layout scrolledcomposite


    【解决方案1】:

    您需要将ScrolledComposite的布局数据设置为FILL,如下所示:

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

    这样,ScrolledComposite 将占用网格单元格的可用空间。

    【讨论】:

    • 这会导致在滚动的内容下方添加额外的空间,而不是像以前那样显示在滚动的合成和标签之间。我希望滚动的复合材料包装内容,然后是标签,任何控件之间都没有多余的空间。这可以通过将 grabExcessVerticalSpace 设置为 FALSE 来实现,但是垂直滚动不起作用。
    • 请澄清您的问题:多余的空间应该在哪里?滚动的合成不应晚于其内容?
    • 我希望标签抓住多余的垂直空间。即scrolledcomposite 的grabverticalspace = false。但随后滚动不起作用。所以我试图找出一种滚动工作的方法,并且在复合材料和标签之间没有间距。我已经编辑了问题,如果编辑清楚,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2018-10-12
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2019-02-14
    相关资源
    最近更新 更多