如何加载复合材料的一部分保持其他静态?

时间:2017-01-31 09:01:04

标签: java layout swt

我在SWT中有一个表单,我有五个不同的复合基于一个父复合。每个复合包含不同的小部件,如单个文本框/组合框/文本和组合等的组合。

现在的问题是当我点击按钮时我想改变我的第三个复合材料以携带一个不同的小部件来保持其他静态。现在我无法从头开始重新加载,因为我希望显示其他小部件的当前值。我怎么能只获取那个复合,处理它并创建一个新的小部件代替它。

创建和隐藏窗口小部件很难考虑,因为它在我们想要重绘的位置是动态的。

以下是摘录。

    formComposite=new Composite(parentComposite,SWT.BORDER_SOLID);
    formLayout=new GridLayout(5,false);
    fromComposite.setLayout(formLayout)
    item.create(formComposite)  //Here item is the widget (combo/textbox/combination text/combo)

     formComposite1=new Composite(parentComposite,SWT.BORDER_SOLID);
    formLayout1=new GridLayout(5,false);
    fromComposite1.setLayout(formLayout)
    item1.create(formComposite1))

  formComposite2=new Composite(parentComposite,SWT.BORDER_SOLID);
    formLayout2=new GridLayout(5,false);
    fromComposite2.setLayout(formLayout)
    item2.create(formComposite2))

 formComposite3=new Composite(parentComposite,SWT.BORDER_SOLID);
    formLayout3=new GridLayout(5,false);
    fromComposite3.setLayout(formLayout)
    item3.create(formComposite3))

 formComposite4=new Composite(parentComposite,SWT.BORDER_SOLID);
    formLayout4=new GridLayout(5,false);
    fromComposite4.setLayout(formLayout)
    item4.create(formComposite4))

现在,如何将item3替换为要创建的其他项目,以防止其他人静止不动?

2 个答案:

答案 0 :(得分:2)

假设每个Composite只有一个孩子,你可以只处理现有的控件并添加新控件然后重做布局。

item.dispose();

item = new Combo(fromComposite, ... style);

formComposite.layout(true);

您可能还需要致电layout上的parentComposite

答案 1 :(得分:0)

您可以使用Control.moveAbove()Control.moveBelow()方法

来完成此操作
// create item3replacement
item3replacement.moveAbove(item3);
item3.dispose();
// call layout on parent when all is done

否则您需要编写自己的Layout来执行此操作。 当您使用GridLayout时,这将是您的起点。 您需要为GridData添加某个职位的值,并在GridLayout

中对此进行处理