【问题标题】:How to fill a ScrolledComposite?如何填充 ScrolledComposite?
【发布时间】:2013-07-24 21:42:38
【问题描述】:

我有一个从 ScrolledComposite 扩展而来的类,在这个类中我创建了一个用于填充父 ScrolledComposite 的 Composite。但是每当我将标签添加到内部复合材料时,它只会包裹到右上角。我希望我的内部 Composite 完全填充外部 ScrolledComposite。有没有办法做到这一点?

    public class Container extends ScrolledComposite {

    final Composite comp;
    Label nameLabel, sizeLabel, dateLabel;
    ArrayList<Label> entrySize, date;
    ArrayList<SimpleEntry> entry;
    Color white;
    Font font;

    public Container(Composite parent, int style) {
        super(parent, style);
        white = new Color(getDisplay(), 255, 255, 255);
        font = new Font(getDisplay(), "Arial", 16, SWT.BOLD);
        setBackground(white);
        setLayout(new GridLayout(1, false));

        comp = new Composite(this, SWT.BORDER);
        GridData compData = new GridData(SWT.FILL, SWT.FILL, true, true);
        comp.setLayoutData(compData);
        setContent(comp);
        comp.setBackground(white);
        comp.setLayout(new GridLayout(3, false));

        nameLabel = new Label(comp, SWT.BOLD);
        sizeLabel = new Label(comp, SWT.BOLD);
        dateLabel = new Label(comp, SWT.BOLD);

        GridData d1 = new GridData(SWT.CENTER, SWT.CENTER, true, false);
        nameLabel.setLayoutData(d1);

        GridData d2 = new GridData(SWT.CENTER, SWT.CENTER, true, false);
        sizeLabel.setLayoutData(d2);

        GridData d3 = new GridData(SWT.CENTER, SWT.CENTER, true, false);
        dateLabel.setLayoutData(d3);

        nameLabel.setBackground(white);
        sizeLabel.setBackground(white);
        dateLabel.setBackground(white);

        nameLabel.setText("Name");
        sizeLabel.setText("Size");
        dateLabel.setText("Last Modified");

        nameLabel.setFont(font);
        sizeLabel.setFont(font);
        dateLabel.setFont(font);

        comp.setSize(comp.computeSize(SWT.DEFAULT, SWT.DEFAULT));
        comp.layout();

        addDisposeListener(new DisposeListener() {
            @Override
            public void widgetDisposed(DisposeEvent e) {
                Container.this.widgetDisposed(e);
            }
        });
    }
}

【问题讨论】:

  • 我已经编辑了它@Baz

标签: java swt scrolledcomposite


【解决方案1】:

只需在构造函数的末尾添加这些行:

this.setMinSize(comp.computeSize(SWT.DEFAULT, SWT.DEFAULT));
this.setExpandHorizontal(true);
this.setExpandVertical(true);

注意事项:

  • 记住dispose()您自己创建的所有资源(ColorFont,...)
  • 考虑通过使用display.getSystemColor(SWT.COLOR_WHITE)display.getSystemFont() 来使用系统资源(无需处置)。

【讨论】:

  • 谢谢@Baz。是的,我已将它们放置在此处未显示的单独函数中。
  • 我认为它会这样做,因为它填充了父级,但在填充数据后我知道父级现在不滚动:/
  • @Anas 添加内容后再次设置最小尺寸会怎样?
  • 是的,它现在工作正常......非常感谢......还有一件事,我是否必须添加一个滚动侦听器才能使其滚动鼠标滚动?只有当我从数据中单击一个项目时它才会开始滚动..
  • @Anas 你不应该那样做。没有任何 Listener 对我来说工作正常。
猜你喜欢
  • 2017-04-23
  • 1970-01-01
  • 2013-11-30
  • 2012-02-15
  • 2013-04-16
  • 1970-01-01
  • 2012-06-26
  • 2020-01-30
  • 1970-01-01
相关资源
最近更新 更多