【问题标题】:Is it safe to share layout instance among different controls在不同控件之间共享布局实例是否安全
【发布时间】:2017-07-14 13:17:27
【问题描述】:

我有一个创建多个控件的类,但该类本身不是组合或小部件。这些控件的布局都为new GridLayout(1, false)。我不确定是否可以定义类级别 GridLayout 变量,并将其用于所有控件?这是代码示例

public void createControl(Composite parent) {
    parent.setLayout(new GridLayout(1, false));

    Composite comp1 = new Composite(parent, SWT.NONE);
    comp1.setLayout(new GridLayout(1, false);

    Composite comp2 = new Composite(parent, SWT.NONE);
    comp2.setLayout(new GridLayout(1, false);

    // ... other stuff   
}

正如您在此处看到的,我创建了三个相同的 GridLayout 实例。我可以为所有这些控件使用一个类级别的实例吗?有任何安全问题或性能缺陷吗?

【问题讨论】:

  • 顺便说一句,我通常在我的代码中重复使用 GridLayout 和其他一些资源,到目前为止我还没有遇到任何问题。但不要期望对共享资源进行更改会更改之前收到它的所有控件/小部件。

标签: java layout swt


【解决方案1】:

SWT 并没有真正说明重用布局对象是否安全,因此您应该假设它不安全。

从代码的外观来看,GridLayout 可能是可重复使用的,但是为每个 Composite 使用新布局的成本非常低,所以我没有尝试过。

或者,您可以使用GridLayoutFactory 定义一个标准布局,您可以将其应用于多个组合:

GridLayoutFactory factory = GridLayoutFactory.swtDefaults();

factory.applyTo(comp1);

factory.applyTo(comp2);

重用GridData绝对安全,每个控件必须有一个单独的GridData对象。

【讨论】:

  • 非常感谢
  • 但是我认为在使用它并将相同的变量用于其他东西之后丢弃 Layout 引用是安全的,考虑到无论如何在 OP 的setLayout (new ...) 中丢弃了引用,对吧?在我的项目中,我有 n 个(通常在 20 到 50 个之间,有时更多)具有相同布局(RowLayout、垂直、相同间距等,只是子对象的数量不同)的复合对象。为了设置它们,我正在考虑只使用一个 Layout 变量,并为设置这些 Composite-s 的循环内的每个 Composite 设置相同的方式。
  • @Heimdall 是的,没关系。但是这些天我会使用 JFace GridLayoutFactoryGridDataFactory 如果可以的话,因为它们有更好的界面。
猜你喜欢
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 2017-10-02
相关资源
最近更新 更多