swt複雜子控制項的增加刪除

2021-06-21 23:27:07 字數 1288 閱讀 2001

swt中我們要刪除乙個子控制項一般使用dispose。現在我們要實現這樣的效果,按某個按鈕,刪除乙個子控制項,再按一次按鈕,又把這個子控制項加回來。如果刪除的時候使用dispose,那增加的時候需要重新建立這個子控制項,如果這個子控制項非常複雜,那麼刪除、增加的效率會很低。用setvisible(false)方法可以隱藏控制項,但是有不足之處,這個時候控制項雖然不顯示但依然佔著位置。如下面2張圖所示。

怎麼樣很好的實現這個功能呢?

可以使用setparent這個函式,刪除子控制項時,只要把子控制項指定另乙個父視窗,然後增加子控制項的時候把子控制項的父視窗設定回來就可以了。

注意public boolean setparent (composite parent) ,這個是control的函式,parent不能為null,setparent 呼叫涉及到2個composite(即它的前後父視窗),要對這2個composite  pack一下。

有demo如下

package test;

import org.eclipse.swt.*;

import org.eclipse.swt.custom.scrolledcomposite;

import org.eclipse.swt.events.selectionevent;

import org.eclipse.swt.events.selectionlistener;

import org.eclipse.swt.graphics.color;

import org.eclipse.swt.layout.*;

import org.eclipse.swt.widgets.*;

public class controlswitcher else

boolean success = btn.setparent(target);

if (success) else

}@override

public void widgetdefaultselected(selectionevent arg0)

});shell.pack();

shell.open();

while (!shell.isdisposed())

}display.dispose();}}

SWT的標籤控制項

文字標籤 label label1 new label shell,swt.none label1.settext 這是文字標籤 分割線標籤 label label2 new label shell,swt.separator swt.vertical swt.shadow etched out 分...

jqgrid增加刪除按鈕和時間控制項

public actionresult loadactionsubmit wmodels.actioncondition condition new wmodels.tgsactionsubmit new wmodels.tgsactionsubmit var jsondata new toarra...

擴充套件SWT帶標籤的Text控制項

參考其他擴充套件控制項的方法實現,其實就是多個基本控制項的組合使用。按照這個方法可以擴充套件出其他控制項。擴充套件控制項 package com.strong.extend import org.eclipse.swt.swt public class strongtext extends comp...