4、其它下拉框

4.1 添加联动二级多选择框(有添加按钮和删除按钮)

package com.view.control.select;

import java.util.ArrayList;
import java.util.List; import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell; import com.global.constant.Constants;
import com.util.CollectionUtil;
import com.util.FileUtil;
import com.view.control.DefinedControl;
import com.view.control.select.DefinedCommonMultiSelect.DefinedCommonMultiSelectEvent;
import com.view.control.select.DropDownBox.Data;
import com.view.swt.SWTResourceManager;
import com.view.util.ImageUtil; /**
* <p>添加联动二级多选择框(有添加按钮和删除按钮)</p>
* <p>
* 第一级为单选框(目前不带搜索功能)<br>
* 第二级为不带搜索功能的多选项框
* </p>
* @version V1.0
*/
public class DefinedFormAddLinkageMultiSelect extends DefinedControl {
/****内容容器*****/
private Composite addComposite;
/****显示名称控件****/
private CLabel name;
/****选中内容显示的文本区域 + 下拉图标 总宽度****/
private int chooseWidth = 323;
private int chooseHeight = 32;
/****内容框中的每项的高度*****/
private int chooseItemHeight = 24;
/*****显示名称**********/
private String nameText;
/*****设置显示名称控件的宽度*****/
private int nameWidth = 100;
private List<DropDownBox.Data> selectedList = new ArrayList<DropDownBox.Data>();
/****每个下拉框的中每行的宽度****/
private int comboRowWidth;
private int comboRowHeight = 0;
/*****主要是数据交互使用*******/
private DefinedCommonMultiSelectEvent itemHandlerListener;
private DefinedFormAddLinkageMultiSelectEvent linkageMultiSelectEvent;
private Listener firsetSelectListener;
private Label addImg ;
private List<DropDownBox.Data> firstDefaultSelectValueList;
private List<Composite> addRowCompositeList = new ArrayList<>();
/*****点击第二级下拉中的小删除按钮发生的额外事件*****/
private Listener deleteBtnListener; public DefinedFormAddLinkageMultiSelect(Composite parent,String nameText,List<DropDownBox.Data> firstSelectedList,int chooseWidth,DefinedFormAddLinkageMultiSelectEvent linkageMultiSelectEvent) {
super(parent);
this.nameText = nameText;
this.selectedList = firstSelectedList;
this.comboRowWidth = chooseWidth/2;
this.chooseWidth = chooseWidth;
this.linkageMultiSelectEvent = linkageMultiSelectEvent;
} public DefinedFormAddLinkageMultiSelect(Composite parent,String nameText,List<DropDownBox.Data> firstSelectedList,int nameTextWidth,int chooseWidth,int chooseItemHeight,int chooseHeight,DefinedFormAddLinkageMultiSelectEvent linkageMultiSelectEvent) {
this(parent,nameText,firstSelectedList,chooseWidth,linkageMultiSelectEvent);
this.nameWidth = nameTextWidth;
this.chooseItemHeight = chooseItemHeight;
this.chooseHeight = chooseHeight;
} @Override
public void paint() {
generateAddComposite(this.parent);
} private void generateAddComposite(Composite contentComposite){
/****显示添加一行(第一行24像素高,后面每一行 chooseHeight高)****/
addComposite = new Composite(contentComposite,SWT.NONE);
GridData gd_addComposite = new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1);
addComposite.setLayoutData(gd_addComposite);
GridLayout gl_addComposite = new GridLayout(2,false);
gl_addComposite.horizontalSpacing = 5;
gl_addComposite.verticalSpacing = 15;
gl_addComposite.marginHeight = 0;
gl_addComposite.marginWidth = 0;
addComposite.setLayout(gl_addComposite);
addComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); name = new CLabel(addComposite,SWT.NONE);
GridData gd_addLabel = new GridData(SWT.RIGHT, SWT.FILL, false, false, 1, 1);
gd_addLabel.widthHint = this.nameWidth;
gd_addLabel.heightHint = 20;
name.setLayoutData(gd_addLabel);
name.setAlignment(SWT.RIGHT);
name.setText(this.nameText);
name.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
name.setForeground(SWTResourceManager.getColor(51,51,51)); addImg = new Label(addComposite,SWT.NONE);
GridData gd_addImg = new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1);
gd_addImg.widthHint = 24;
gd_addImg.heightHint = 24;
addImg.setLayoutData(gd_addImg);
addImg.setImage(ImageUtil.getImage(FileUtil.loadResourceFileAsStream(Constants.ADD_ICON)));
addImg.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
addImg.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_HAND));
addImg.addListener(SWT.MouseDown, new Listener(){
@Override
public void handleEvent(Event event) {
generateAddRowComposite(addComposite,null);
reLayout();
}
}); if(CollectionUtil.isNotEmpty(firstDefaultSelectValueList)){
for(DropDownBox.Data firstDefaultSelectValue:firstDefaultSelectValueList){
generateAddRowComposite(addComposite,firstDefaultSelectValue);
}
}
reLayout();
} private void reLayout(){
Composite contentComposite = addComposite;
while(contentComposite != this.parent){
contentComposite.layout(true);
contentComposite = contentComposite.getParent();
}
contentComposite.layout(true);
Composite parentComposite = contentComposite.getParent();
while(!(parentComposite instanceof ScrolledComposite) && !(parentComposite instanceof Shell)){
parentComposite.layout(true);
contentComposite = parentComposite;
parentComposite = parentComposite.getParent();
}
if(parentComposite instanceof ScrolledComposite){
((ScrolledComposite)parentComposite).setMinSize(contentComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
} /**
*
* @param contentComposite 为addComposite(2列)
*/
private void generateAddRowComposite(Composite contentComposite,DropDownBox.Data defaultValue){
Composite addRowComposite = new Composite(contentComposite,SWT.NONE);
GridData gd_addRowComposite = new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1);
gd_addRowComposite.heightHint = this.chooseHeight;
addRowComposite.setLayoutData(gd_addRowComposite); GridLayout gl_addRowComposite = new GridLayout(5,false);
gl_addRowComposite.horizontalSpacing = 5;
gl_addRowComposite.verticalSpacing = 0;
gl_addRowComposite.marginHeight = 0;
gl_addRowComposite.marginWidth = 0;
addRowComposite.setLayout(gl_addRowComposite);
addRowComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); CLabel emptyLabel = new CLabel(addRowComposite,SWT.NONE);
GridData gd_addLabel = new GridData(SWT.RIGHT, SWT.FILL, false, true, 1, 1);
gd_addLabel.widthHint = this.nameWidth;
emptyLabel.setLayoutData(gd_addLabel);
emptyLabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); DefinedSingleSelect firstSelect = new DefinedSingleSelect(addRowComposite,this.selectedList,this.chooseWidth /2,this.chooseHeight);
List<DropDownBox.Data> secondDataList = new ArrayList<>();
List<DropDownBox.Data> secondDefaultList = new ArrayList<DropDownBox.Data>();
if(null != defaultValue){
secondDataList = linkageMultiSelectEvent.getSecondData(defaultValue);
secondDefaultList = linkageMultiSelectEvent.getSecondDefaultValueList(defaultValue);
}
DefinedMultiSelect multiSelect = new DefinedMultiSelect(addRowComposite,secondDataList,this.chooseWidth /2,this.chooseItemHeight );
if(null != defaultValue){
firstSelect.setDefaultValue(defaultValue);
}
if(CollectionUtil.isNotEmpty(secondDefaultList)){
multiSelect.setDefaultValueList(secondDefaultList);
}
if(this.comboRowWidth != 0){
firstSelect.setComboRowWidth(this.comboRowWidth );
multiSelect.setComboRowWidth(this.comboRowWidth);
}
if(this.comboRowHeight != 0){
firstSelect.setComboRowHeight(this.comboRowHeight);
multiSelect.setComboRowHeight(this.comboRowHeight);
} firstSelect.addSelectListener(new Listener(){
@Override
public void handleEvent(Event event) {
CLabel itemLabel = (CLabel)event.widget;
DropDownBox.Data data = (Data)itemLabel.getData("data");
multiSelect.disposeAllChooseItem();
List<DropDownBox.Data> secondDataList = linkageMultiSelectEvent.getSecondData(data);
multiSelect.setComboDataList(secondDataList);
itemLabel.setData("firstSelect", firstSelect);
}
}); //主要用于控制样式
multiSelect.addItemHandlerListener(new DefinedCommonMultiSelectEvent() { @Override
public void disposeItemEvent(Data data, Composite text_composite) {
((GridData)addRowComposite.getLayoutData()).heightHint = multiSelect.getHeight();
reLayout();
} @Override
public void addItemEvent(Data data, Composite text_composite) {
((GridData)addRowComposite.getLayoutData()).heightHint = multiSelect.getHeight();
reLayout();
}
});
if(null != itemHandlerListener){
multiSelect.addItemHandlerListener(itemHandlerListener);
}
if(null != firsetSelectListener){
firstSelect.addSelectListener(firsetSelectListener);
} firstSelect.paint();
firstSelect.getContentText().setData("firstSelect", firstSelect); multiSelect.paint();
multiSelect.getChooseComposite().setData(firstSelect); Label deleteImg = new Label(addRowComposite,SWT.NONE);
GridData gd_deleteImg = new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1);
gd_deleteImg.widthHint = 24;
gd_deleteImg.heightHint = 24;
deleteImg.setLayoutData(gd_deleteImg);
deleteImg.setImage(ImageUtil.getImage(FileUtil.loadResourceFileAsStream(Constants.DELETE_ICON)));
deleteImg.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
deleteImg.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_HAND));
deleteImg.setData("multiSelect", multiSelect); //将删除按钮绑定到第一个下拉框上
deleteImg.setData("firstSelect", firstSelect); //将删除按钮绑定到第一个下拉框上
if(this.deleteBtnListener != null){
deleteImg.addListener(SWT.MouseDown,this.deleteBtnListener);
}
deleteImg.addListener(SWT.MouseDown, new Listener(){
@Override
public void handleEvent(Event event) {
multiSelect.disposeAllChooseItem();
addRowCompositeList.remove(addRowComposite);
addRowComposite.dispose();
reLayout();
}
});
addRowComposite.setData("firstSelect", firstSelect);
addRowComposite.setData("multiSelect", multiSelect); Label mentionLabel = new Label(addRowComposite,SWT.WRAP);
GridData gd_mention = new GridData(SWT.LEFT, SWT.CENTER, false, true, 1, 1);
Rectangle bounds = contentComposite.getBounds();
if(bounds.width == 0){
bounds = contentComposite.getParent().getParent().getBounds();
}
gd_mention.widthHint = bounds.width - this.nameWidth - this.chooseWidth -24-15;
mentionLabel.setLayoutData(gd_mention);
mentionLabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
mentionLabel.setForeground(SWTResourceManager.getColor(51,51,51));
addRowComposite.layout(true);
addRowCompositeList.add(addRowComposite);
} public interface DefinedFormAddLinkageMultiSelectEvent{
/*****根据第一个下拉框选择的内容动态生成第二个框选择的内容******/
List<DropDownBox.Data> getSecondData(DropDownBox.Data firstValue);
/*****根据第一个获取其默认已经配置的内容*****/
List<DropDownBox.Data> getSecondDefaultValueList(DropDownBox.Data firstValue);
} public int getChooseWidth() {
return chooseWidth;
} public void setChooseWidth(int chooseWidth) {
this.chooseWidth = chooseWidth;
} public int getChooseHeight() {
return chooseHeight;
} public void setChooseHeight(int chooseHeight) {
this.chooseHeight = chooseHeight;
} public int getChooseItemHeight() {
return chooseItemHeight;
} public void setChooseItemHeight(int chooseItemHeight) {
this.chooseItemHeight = chooseItemHeight;
} public int getNameWidth() {
return nameWidth;
} public void setNameWidth(int nameWidth) {
this.nameWidth = nameWidth;
} public int getComboRowWidth() {
return comboRowWidth;
} public void setComboRowWidth(int comboRowWidth) {
this.comboRowWidth = comboRowWidth;
} public int getComboRowHeight() {
return comboRowHeight;
} public void setComboRowHeight(int comboRowHeight) {
this.comboRowHeight = comboRowHeight;
} public void setNameText(String nameText) {
this.nameText = nameText;
} /*****
* 第二个多选择框在删除一个选择项和新增一个选择项发生的事件(主要是数据交互)
* @param itemHandlerListener
*/
public void setItemHandlerListener(DefinedCommonMultiSelectEvent itemHandlerListener) {
this.itemHandlerListener = itemHandlerListener;
} public void setLinkageMultiSelectEvent(DefinedFormAddLinkageMultiSelectEvent linkageMultiSelectEvent) {
this.linkageMultiSelectEvent = linkageMultiSelectEvent;
} public void setFirsetSelectListener(Listener firsetSelectListener) {
this.firsetSelectListener = firsetSelectListener;
} public void setFirstDefaultSelectValueList(List<DropDownBox.Data> firstDefaultSelectValueList) {
this.firstDefaultSelectValueList = firstDefaultSelectValueList;
} public List<DropDownBox.Data> getSelectedList() {
return selectedList;
} public void setDeleteBtnListener(Listener deleteBtnListener) {
this.deleteBtnListener = deleteBtnListener;
} public List<Composite> getAddRowCompositeList() {
return addRowCompositeList;
}
}

4.2 二级联动下拉框,第二级带搜索功能

package com.view.control.select;

import java.util.ArrayList;
import java.util.List; import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell; import com.global.constant.Constants;
import com.util.CollectionUtil;
import com.util.FileUtil;
import com.util.StringUtil;
import com.view.control.DefinedControl;
import com.view.control.DefinedSearchText;
import com.view.control.select.DefinedCommonMultiSelect.DefinedCommonMultiSelectEvent;
import com.view.swt.SWTResourceManager;
import com.view.swt.StyleTextLink;
import com.view.util.ImageUtil; /**
* <p>联动二级搜索下拉框</p>
* * <p>
* 第一级为单选框(目前不带搜索功能)<br>
* 第二级为带搜索功能的多选项框
* </p>
* @version V1.0
*/
public class DefinedFormSearchAddLinkageMultiSelect extends DefinedControl {
/****内容容器*****/
private Composite addComposite;
/****显示名称控件****/
private CLabel name;
/****选中内容显示的文本区域 + 下拉图标 总宽度****/
private int chooseWidth = 323;
private int chooseHeight = 32;
/****内容框中的每项的高度*****/
private int chooseItemHeight = 24;
/*****显示名称**********/
private String nameText;
/*****设置显示名称控件的宽度*****/
private int nameWidth = 100;
private List<DropDownBox.Data> selectedList = new ArrayList<DropDownBox.Data>();
/****每个下拉框的中每行的宽度****/
private int comboRowWidth;
private int comboRowHeight = 0;
/*****主要是数据交互使用*******/
private DefinedCommonMultiSelectEvent itemHandlerListener;
private Listener firsetSelectListener;
private Label addImg ;
private List<DropDownBox.Data> firstDefaultSelectValueList;
private List<Composite> addRowCompositeList = new ArrayList<>();
/*****点击第二级下拉中的小删除按钮发生的额外事件*****/
private Listener deleteBtnListener;
/*****添加一行时出现的额外事件**********/
private Listener addRowListener;
private DefinedFormSearchAddLinkageMultiSelectEvent linkageMultiSelectEvent;
private boolean asynchronous = false;
private int pagePerNum = 10;
private String defaultMultiSearchMentionHint;
private boolean multiInitEmpty;
private StyleTextLink.StyleTextLinkEvent linkEvent;
private int mentionWidth; public DefinedFormSearchAddLinkageMultiSelect(Composite parent,String nameText,List<DropDownBox.Data> firstSelectedList,int chooseWidth) {
super(parent);
this.nameText = nameText;
this.selectedList = firstSelectedList;
this.comboRowWidth = chooseWidth/2;
this.chooseWidth = chooseWidth;
} public DefinedFormSearchAddLinkageMultiSelect(Composite parent,String nameText,List<DropDownBox.Data> firstSelectedList,int nameTextWidth,int chooseWidth,int chooseItemHeight,int chooseHeight,DefinedFormSearchAddLinkageMultiSelectEvent linkageMultiSelectEvent) {
this(parent,nameText,firstSelectedList,chooseWidth);
this.nameWidth = nameTextWidth;
this.chooseItemHeight = chooseItemHeight;
this.chooseHeight = chooseHeight;
this.linkageMultiSelectEvent = linkageMultiSelectEvent;
} @Override
public void paint() {
generateAddComposite(this.parent);
} private void generateAddComposite(Composite contentComposite){
/****显示添加一行(第一行24像素高,后面每一行 chooseHeight高)****/
addComposite = new Composite(contentComposite,SWT.NONE);
GridData gd_addComposite = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
addComposite.setLayoutData(gd_addComposite);
GridLayout gl_addComposite = new GridLayout(2,false);
gl_addComposite.horizontalSpacing = 5;
gl_addComposite.verticalSpacing = 15;
gl_addComposite.marginHeight = 0;
gl_addComposite.marginWidth = 0;
addComposite.setLayout(gl_addComposite);
addComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); name = new CLabel(addComposite,SWT.NONE);
GridData gd_addLabel = new GridData(SWT.RIGHT, SWT.FILL, false, false, 1, 1);
gd_addLabel.widthHint = this.nameWidth;
gd_addLabel.heightHint = 20;
name.setLayoutData(gd_addLabel);
name.setAlignment(SWT.RIGHT);
name.setText(this.nameText);
name.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
name.setForeground(SWTResourceManager.getColor(51,51,51)); addImg = new Label(addComposite,SWT.NONE);
GridData gd_addImg = new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1);
gd_addImg.widthHint = 24;
gd_addImg.heightHint = 24;
addImg.setLayoutData(gd_addImg);
addImg.setImage(ImageUtil.getImage(FileUtil.loadResourceFileAsStream(Constants.ADD_ICON)));
addImg.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
addImg.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_HAND));
addImg.addListener(SWT.MouseDown, new Listener(){
@Override
public void handleEvent(Event event) {
generateAddRowComposite(addComposite,null);
reLayout();
}
}); if(CollectionUtil.isNotEmpty(firstDefaultSelectValueList)){
for(DropDownBox.Data firstDefaultSelectValue:firstDefaultSelectValueList){
generateAddRowComposite(addComposite,firstDefaultSelectValue);
}
}
reLayout();
} private void reLayout(){
Composite contentComposite = addComposite;
while(contentComposite != this.parent){
contentComposite.layout(true);
contentComposite = contentComposite.getParent();
}
contentComposite.layout(true);
Composite parentComposite = contentComposite.getParent();
while(!(parentComposite instanceof ScrolledComposite) && !(parentComposite instanceof Shell)){
parentComposite.layout(true);
contentComposite = parentComposite;
parentComposite = parentComposite.getParent();
}
if(parentComposite instanceof ScrolledComposite){
((ScrolledComposite)parentComposite).setMinSize(contentComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
} /**
*
* @param contentComposite 为addComposite(2列)
*/
private void generateAddRowComposite(Composite contentComposite,DropDownBox.Data defaultValue){
Composite addRowComposite = new Composite(contentComposite,SWT.NONE);
GridData gd_addRowComposite = new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1);
gd_addRowComposite.heightHint = this.chooseHeight;
addRowComposite.setLayoutData(gd_addRowComposite); GridLayout gl_addRowComposite = new GridLayout(5,false);
gl_addRowComposite.horizontalSpacing = 5;
gl_addRowComposite.verticalSpacing = 0;
gl_addRowComposite.marginHeight = 0;
gl_addRowComposite.marginWidth = 0;
addRowComposite.setLayout(gl_addRowComposite);
addRowComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); CLabel emptyLabel = new CLabel(addRowComposite,SWT.NONE);
GridData gd_addLabel = new GridData(SWT.RIGHT, SWT.FILL, false, true, 1, 1);
gd_addLabel.widthHint = this.nameWidth;
emptyLabel.setLayoutData(gd_addLabel);
emptyLabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); DefinedSingleSelect firstSelect = new DefinedSingleSelect(addRowComposite,this.selectedList,this.chooseWidth /2,this.chooseHeight);
DefinedSearchMultiSelect multiSelect = new DefinedSearchMultiSelect(addRowComposite,new DefinedSearchMultiSelect.SearchMultiSelectEvent(){ @Override
public DefinedSearchText.SearchPageResult<DropDownBox.Data> search(Event event, String searchKeys, int pageNum, int pagePerNum, List<Object> filters) {
return linkageMultiSelectEvent.search(event, searchKeys, pageNum, pagePerNum, filters);
} @Override
public String verifySearchContent(String searchKey) {
return linkageMultiSelectEvent.verifySearchContent(searchKey);
} },this.chooseWidth /2,this.chooseItemHeight );
multiSelect.setAsynchronous(asynchronous);
multiSelect.setInitEmpty(this.multiInitEmpty);
multiSelect.setLinkEvent(linkEvent);
if(pagePerNum>0){
multiSelect.setPagePerNum(pagePerNum);
} if(StringUtil.isNotNullAndEmpty(defaultMultiSearchMentionHint)){
multiSelect.setDefaultMentionHint(defaultMultiSearchMentionHint);
}
List<DropDownBox.Data> secondDefaultList = new ArrayList<DropDownBox.Data>();
if(null != defaultValue){
firstSelect.setDefaultValue(defaultValue);
multiSelect.addSearchExternalFilter(defaultValue.getValue());
multiSelect.setInitEmpty(false);
secondDefaultList = linkageMultiSelectEvent.getSecondDefaultValueList(defaultValue);
}
if(CollectionUtil.isNotEmpty(secondDefaultList)){
multiSelect.setDefaultValueList(secondDefaultList);
}
if(this.comboRowWidth != 0){
firstSelect.setComboRowWidth(this.comboRowWidth );
multiSelect.setComboRowWidth(this.comboRowWidth);
}
if(this.comboRowHeight != 0){
firstSelect.setComboRowHeight(this.comboRowHeight);
multiSelect.setComboRowHeight(this.comboRowHeight);
}
firstSelect.addSelectListener(new Listener(){
@Override
public void handleEvent(Event event) {
CLabel itemLabel = (CLabel)event.widget;
DropDownBox.Data data = (DropDownBox.Data)itemLabel.getData("data");
multiSelect.disposeAllChooseItem();
multiSelect.replaceSearchExternalFilter(data.getValue(), 0);
multiSelect.setInitEmpty(false);
itemLabel.setData("firstSelect", firstSelect);
}
}); //主要用于控制样式
multiSelect.addItemHandlerListener(new DefinedCommonMultiSelectEvent() {
@Override
public void disposeItemEvent(DropDownBox.Data data, Composite text_composite) {
((GridData)addRowComposite.getLayoutData()).heightHint = multiSelect.getHeight();
reLayout();
} @Override
public void addItemEvent(DropDownBox.Data data, Composite text_composite) {
((GridData)addRowComposite.getLayoutData()).heightHint = multiSelect.getHeight();
reLayout();
}
});
if(null != itemHandlerListener){
multiSelect.addItemHandlerListener(itemHandlerListener);
}
if(null != firsetSelectListener){
firstSelect.addSelectListener(firsetSelectListener);
} firstSelect.paint();
firstSelect.getContentText().setData("firstSelect", firstSelect); multiSelect.paint();
multiSelect.getChooseComposite().setData(firstSelect); Label deleteImg = new Label(addRowComposite,SWT.NONE);
GridData gd_deleteImg = new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1);
gd_deleteImg.widthHint = 24;
gd_deleteImg.heightHint = 24;
deleteImg.setLayoutData(gd_deleteImg);
deleteImg.setImage(ImageUtil.getImage(FileUtil.loadResourceFileAsStream(Constants.DELETE_ICON)));
deleteImg.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
deleteImg.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_HAND));
deleteImg.setData("multiSelect", multiSelect); //将多选框绑定到删除图标上
deleteImg.setData("firstSelect", firstSelect); //将第一个下拉框绑定到删除图标上
if(this.deleteBtnListener != null){
deleteImg.addListener(SWT.MouseDown,this.deleteBtnListener);
}
deleteImg.addListener(SWT.MouseDown, new Listener(){
@Override
public void handleEvent(Event event) {
multiSelect.disposeAllChooseItem();
addRowCompositeList.remove(addRowComposite);
addRowComposite.dispose();
reLayout();
}
});
addRowComposite.setData("firstSelect", firstSelect);
addRowComposite.setData("multiSelect", multiSelect); Label mentionLabel = new Label(addRowComposite,SWT.WRAP);
GridData gd_mention = new GridData(SWT.LEFT, SWT.CENTER, false, true, 1, 1);
if(this.mentionWidth != 0){
gd_mention.widthHint = this.mentionWidth;
}else{
Rectangle bounds = contentComposite.getBounds();
if(bounds.width == 0){
bounds = contentComposite.getParent().getParent().getBounds();
}
gd_mention.widthHint = bounds.width - this.nameWidth - this.chooseWidth -24-15;
}
mentionLabel.setLayoutData(gd_mention);
mentionLabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
mentionLabel.setForeground(SWTResourceManager.getColor(51,51,51));
addRowComposite.layout(true);
addRowCompositeList.add(addRowComposite);
if(addRowListener != null){
Event addRowEvent = new Event();
addRowEvent.widget = addRowComposite;
addRowEvent.button = 1;
addRowListener.handleEvent(addRowEvent);
}
} public interface DefinedFormSearchAddLinkageMultiSelectEvent{
/*****根据第一个获取其默认已经配置的内容*****/
List<DropDownBox.Data> getSecondDefaultValueList(DropDownBox.Data firstValue);
DefinedSearchText.SearchPageResult<DropDownBox.Data> search(Event event,String searchKeys,int pageNum,int pagePerNum,List<Object> filters);
String verifySearchContent(String searchKey);
} public int getChooseWidth() {
return chooseWidth;
} public void setChooseWidth(int chooseWidth) {
this.chooseWidth = chooseWidth;
} public int getChooseHeight() {
return chooseHeight;
} public void setChooseHeight(int chooseHeight) {
this.chooseHeight = chooseHeight;
} public int getChooseItemHeight() {
return chooseItemHeight;
} public void setChooseItemHeight(int chooseItemHeight) {
this.chooseItemHeight = chooseItemHeight;
} public int getNameWidth() {
return nameWidth;
} public void setNameWidth(int nameWidth) {
this.nameWidth = nameWidth;
} public int getComboRowWidth() {
return comboRowWidth;
} public void setComboRowWidth(int comboRowWidth) {
this.comboRowWidth = comboRowWidth;
} public int getComboRowHeight() {
return comboRowHeight;
} public void setComboRowHeight(int comboRowHeight) {
this.comboRowHeight = comboRowHeight;
} public void setNameText(String nameText) {
this.nameText = nameText;
} /*****
* 第二个多选择框在删除一个选择项和新增一个选择项发生的事件(主要是数据交互)
* @param itemHandlerListener
*/
public void setItemHandlerListener(DefinedCommonMultiSelectEvent itemHandlerListener) {
this.itemHandlerListener = itemHandlerListener;
} public void setLinkageMultiSelectEvent(DefinedFormSearchAddLinkageMultiSelectEvent linkageMultiSelectEvent) {
this.linkageMultiSelectEvent = linkageMultiSelectEvent;
} public void setFirsetSelectListener(Listener firsetSelectListener) {
this.firsetSelectListener = firsetSelectListener;
} public void setFirstDefaultSelectValueList(List<DropDownBox.Data> firstDefaultSelectValueList) {
this.firstDefaultSelectValueList = firstDefaultSelectValueList;
} public List<DropDownBox.Data> getSelectedList() {
return selectedList;
} /**
* 设置删除整行的逻辑 其中event widget获取的是删除图标,通过删除图标获取第一个下拉框和第二个多选下拉框
* @param deleteBtnListener
*/
public void setDeleteBtnListener(Listener deleteBtnListener) {
this.deleteBtnListener = deleteBtnListener;
} public List<Composite> getAddRowCompositeList() {
return addRowCompositeList;
}
public int getPagePerNum() {
return pagePerNum;
} public void setPagePerNum(int pagePerNum) {
this.pagePerNum = pagePerNum;
} public boolean isAsynchronous() {
return asynchronous;
} public void setAsynchronous(boolean asynchronous) {
this.asynchronous = asynchronous;
} public String getDefaultMultiSearchMentionHint() {
return defaultMultiSearchMentionHint;
} public void setDefaultMultiSearchMentionHint(String defaultMultiSearchMentionHint) {
this.defaultMultiSearchMentionHint = defaultMultiSearchMentionHint;
} public boolean isMultiInitEmpty() {
return multiInitEmpty;
} public void setMultiInitEmpty(boolean multiInitEmpty) {
this.multiInitEmpty = multiInitEmpty;
} public void setLinkEvent(StyleTextLink.StyleTextLinkEvent linkEvent) {
this.linkEvent = linkEvent;
} /**
* 添加一行触发的事件
* @param addRowListener event 中widget是行控件 Composite
*/
public void setAddRowListener(Listener addRowListener) {
this.addRowListener = addRowListener;
} public int getMentionWidth() {
return mentionWidth;
} public void setMentionWidth(int mentionWidth) {
this.mentionWidth = mentionWidth;
}
}

4.3 带搜索功能的二级联动框

package com.view.control.select;

import java.util.ArrayList;
import java.util.List; import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell; import com.global.constant.Constants;
import com.util.CollectionUtil;
import com.util.FileUtil;
import com.util.StringUtil;
import com.view.control.DefinedControl;
import com.view.control.select.DefinedCommonSingleSelect.DefinedCommonSingleSelectEvent;
import com.view.control.select.DropDownBox.Data;
import com.view.swt.SWTResourceManager;
import com.view.swt.StyleTextLink;
import com.view.util.ImageUtil; /**
* <p>添加联动二级多选框(有添加删除按钮)</p>
* <p>
* 第一级为单选框(可带搜索功能)<br>
* 第二级为单选框(可带搜索功能)
* </p>
* <p>
* 区分第一级拉框是否是带搜索功能,取决于firstSearchEvent 变量是否为null,不为null表示带搜索功能<br>
* 区分第二级拉框是否是带搜索功能,取决于secondSearchEvent 变量是否为null,不为null表示带搜索功能<br>
* </p>
* <p>
* 第一级下拉框可以通过 listener 方法 event的widget 使用getData("firstSelect") 获取下拉框本身<br>
* 第二级下拉框可以通过 listener 方法 event的widget 使用getData("firstSelect") 获取第一个下拉框对象,通过getData("secondSelect")获取第二个下拉框本身<br>
* deleteBtnListener 通用event的widget使用getData("firstSelect") 获取第一个下拉框对象,通过getData("secondSelect")获取第二个下拉框
* <p>
* @version V1.0
*/
public class DefinedFromAddLinkageSingleSelect extends DefinedControl { /****内容容器*****/
private Composite addComposite;
/****显示名称控件****/
private CLabel name;
/****选中内容显示的文本区域 + 下拉图标 总宽度(两级)****/
private int chooseWidth = 323;
private int chooseHeight = 32;
/*****显示名称**********/
private String nameText;
/*****设置显示名称控件的宽度*****/
private int nameWidth = 100;
/****每个下拉框的中每行的宽度****/
private int comboRowWidth;
private int comboRowHeight = 0;
private Label addImg ;
/*****点击第二级下拉中的小删除按钮发生的额外事件*****/
private Listener deleteBtnListener;
/****联动事件*****/
private DefinedFromAddLinkageSingleSelectEvent linkageSelectEvent;
/****是否将value也显示在下拉框中,呈现效果为(display(value))****/
private boolean showValue;
private List<Composite> addRowCompositeList = new ArrayList<>(); //****以下为第一级下拉框不带搜索功能需要使用的变量***************//
/****第一级下拉框选择范围内容(若第一级下拉框带搜索功能,不需要传递该值,应实现搜索方法,通过搜索方法填充第一级下拉框选择范围)***/
private List<DropDownBox.Data> firstSelectedList = new ArrayList<DropDownBox.Data>();
//****结束**************/ //****以下为第一级下拉框带搜索功能的用法*****//
/***是否异步分页加载**/
private boolean firstAsynchronous;
/***搜索框中的默认提示*****/
private String firstDefaultMultiSearchMentionHint;
/**链接事件******/
private StyleTextLink.StyleTextLinkEvent firstLinkEvent;
private DefinedSearchSingleSelect.SearchSingleSelectEvent firstSearchEvent;
// ************结束*********************// //*******第一级下拉框公用变量***********//
/****第一级搜索框默认内容********/
private List<DropDownBox.Data> firstDefaultSelectValueList;
/****选中第一级搜索框触发的事件*******/
private Listener firsetSelectListener;
private DefinedCommonSingleSelectEvent firstDropdownBeforeEvent;
// ************结束*********************// // ****以下为第二级下拉框带搜索功能的用法*****//
/*** 是否异步分页加载 **/
private boolean secondAsynchronous;
/*** 搜索框中的默认提示 *****/
private String secondDefaultMultiSearchMentionHint;
/** 链接事件 ******/
private StyleTextLink.StyleTextLinkEvent secondLinkEvent;
private DefinedSearchSingleSelect.SearchSingleSelectEvent secondSearchEvent;
// ************结束*********************// // *******第二级下拉框公用变量***********//
/**** 选中第二级搜索框触发的事件 *******/
private Listener secondSelectListener;
private DefinedCommonSingleSelectEvent secondDropdownBeforeEvent;
// ************结束*********************// public DefinedFromAddLinkageSingleSelect(Composite parent, String nameText, int chooseWidth,
DefinedFromAddLinkageSingleSelectEvent linkageSelectEvent) {
super(parent);
this.nameText = nameText;
this.comboRowWidth = chooseWidth / 2;
this.chooseWidth = chooseWidth;
this.linkageSelectEvent = linkageSelectEvent;
} public DefinedFromAddLinkageSingleSelect(Composite parent, String nameText, int nameTextWidth, int chooseWidth,
int chooseHeight, DefinedFromAddLinkageSingleSelectEvent linkageSelectEvent) {
this(parent, nameText, chooseWidth, linkageSelectEvent);
this.nameWidth = nameTextWidth;
this.chooseHeight = chooseHeight;
} @Override
public void paint() {
generateAddComposite(this.parent);
} private void generateAddComposite(Composite contentComposite){
/****显示添加一行(第一行24像素高,后面每一行 chooseHeight高)****/
addComposite = new Composite(contentComposite,SWT.NONE);
GridData gd_addComposite = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
addComposite.setLayoutData(gd_addComposite);
GridLayout gl_addComposite = new GridLayout(2,false);
gl_addComposite.horizontalSpacing = 5;
gl_addComposite.verticalSpacing = 15;
gl_addComposite.marginHeight = 0;
gl_addComposite.marginWidth = 0;
addComposite.setLayout(gl_addComposite);
addComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); name = new CLabel(addComposite,SWT.NONE);
GridData gd_addLabel = new GridData(SWT.RIGHT, SWT.FILL, false, false, 1, 1);
gd_addLabel.widthHint = this.nameWidth;
gd_addLabel.heightHint = 20;
name.setLayoutData(gd_addLabel);
name.setAlignment(SWT.RIGHT);
name.setText(this.nameText);
name.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
name.setForeground(SWTResourceManager.getColor(51,51,51)); addImg = new Label(addComposite,SWT.NONE);
GridData gd_addImg = new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1);
gd_addImg.widthHint = 24;
gd_addImg.heightHint = 24;
addImg.setLayoutData(gd_addImg);
addImg.setImage(ImageUtil.getImage(FileUtil.loadResourceFileAsStream(Constants.ADD_ICON)));
addImg.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
addImg.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_HAND));
addImg.addListener(SWT.MouseDown, new Listener(){
@Override
public void handleEvent(Event event) {
generateAddRowComposite(addComposite,null);
reLayout();
}
}); if(CollectionUtil.isNotEmpty(firstDefaultSelectValueList)){
for(DropDownBox.Data firstDefaultSelectValue:firstDefaultSelectValueList){
generateAddRowComposite(addComposite,firstDefaultSelectValue);
}
}
reLayout();
} /**
* 绘制每行联动下拉框
* @param contentComposite
* @param defaultValue
*/
private void generateAddRowComposite(Composite contentComposite,DropDownBox.Data defaultValue){
Composite addRowComposite = new Composite(contentComposite,SWT.NONE);
GridData gd_addRowComposite = new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1);
gd_addRowComposite.heightHint = this.chooseHeight;
addRowComposite.setLayoutData(gd_addRowComposite); GridLayout gl_addRowComposite = new GridLayout(5,false);
gl_addRowComposite.horizontalSpacing = 5;
gl_addRowComposite.verticalSpacing = 0;
gl_addRowComposite.marginHeight = 0;
gl_addRowComposite.marginWidth = 0;
addRowComposite.setLayout(gl_addRowComposite);
addRowComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); CLabel emptyLabel = new CLabel(addRowComposite,SWT.NONE);
GridData gd_addLabel = new GridData(SWT.RIGHT, SWT.FILL, false, true, 1, 1);
gd_addLabel.widthHint = this.nameWidth;
emptyLabel.setLayoutData(gd_addLabel);
emptyLabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); //开始生成第一级下拉框对象
DropDownBox<DropDownBox.Data> firstSelector = null;
if(this.firstSearchEvent != null){
//第一级下拉框带搜索功能
DefinedSearchSingleSelect searchFirstSelector = new DefinedSearchSingleSelect(addRowComposite,this.firstSearchEvent,this.chooseWidth /2,this.chooseHeight,showValue);
if(null != defaultValue){
searchFirstSelector.setDefaultValue(defaultValue);
}
if(StringUtil.isNotNullAndEmpty(this.firstDefaultMultiSearchMentionHint)){
searchFirstSelector.setDefaultMentionHint(firstDefaultMultiSearchMentionHint);
}
searchFirstSelector.setAsynchronous(this.firstAsynchronous);
searchFirstSelector.setLinkEvent(this.firstLinkEvent);
if(null != this.firstDropdownBeforeEvent){
searchFirstSelector.setDropdownBeforeEvent(this.firstDropdownBeforeEvent);
}
searchFirstSelector.addSelectListener(event->{
CLabel itemLabel = (CLabel)event.widget;
itemLabel.setData("firstSelect", searchFirstSelector);
});
firstSelector = searchFirstSelector;
}else{
//第一级下拉框不带搜索功能
DefinedSingleSelect noSearchFirstSelector = new DefinedSingleSelect(addRowComposite,this.firstSelectedList,this.chooseWidth /2,this.chooseHeight,showValue);
if(null != defaultValue){
noSearchFirstSelector.setDefaultValue(defaultValue);
}
if(null != this.firstDropdownBeforeEvent){
noSearchFirstSelector.setDropdownBeforeEvent(this.firstDropdownBeforeEvent);
}
noSearchFirstSelector.addSelectListener(event->{
CLabel itemLabel = (CLabel)event.widget;
itemLabel.setData("firstSelect", noSearchFirstSelector);
});
firstSelector = noSearchFirstSelector;
} DropDownBox.Data secondDefaultValue = null;
if(null != defaultValue){
secondDefaultValue = linkageSelectEvent.getSecondDefaultValue(defaultValue);
}
DropDownBox<DropDownBox.Data> secondSelector = null;
//定义第二个下拉框
if(this.secondSearchEvent != null){
//带搜索功能
DefinedSearchSingleSelect searchSecondSelector = new DefinedSearchSingleSelect(addRowComposite,this.secondSearchEvent,this.chooseWidth /2,this.chooseHeight,showValue);
if(null != secondDefaultValue){
searchSecondSelector.setDefaultValue(secondDefaultValue);
}
searchSecondSelector.getContentText().setData("secondSelect", secondSelector);
searchSecondSelector.getContentText().setData("firstSelect", firstSelector);
if(StringUtil.isNotNullAndEmpty(this.secondDefaultMultiSearchMentionHint)){
searchSecondSelector.setDefaultMentionHint(secondDefaultMultiSearchMentionHint);
}
searchSecondSelector.setAsynchronous(this.secondAsynchronous);
searchSecondSelector.setLinkEvent(this.secondLinkEvent);
if(null != this.secondDropdownBeforeEvent){
searchSecondSelector.setDropdownBeforeEvent(this.secondDropdownBeforeEvent);
}
firstSelector.addSelectListener(event->{
CLabel itemLabel = (CLabel)event.widget;
DropDownBox.Data data = (Data)itemLabel.getData("data");
searchSecondSelector.replaceSearchExternalFilter(data.getValue(), 0);
searchSecondSelector.setInitEmpty(false);
});
searchSecondSelector.addSelectListener(event->{
CLabel itemLabel = (CLabel)event.widget;
itemLabel.setData("firstSelect", searchSecondSelector.getContentComposite().getData("firstSelect"));
itemLabel.setData("secondSelect", searchSecondSelector);
});
secondSelector = searchSecondSelector;
}else{
//不带搜索功能
List<DropDownBox.Data> secondDataList = new ArrayList<>();
if(null != defaultValue){
secondDataList = linkageSelectEvent.getSecondData(defaultValue);
}
DefinedSingleSelect noSearchSecondSelector = new DefinedSingleSelect(addRowComposite,secondDataList,this.chooseWidth /2,this.chooseHeight,showValue);
if(null != secondDefaultValue){
noSearchSecondSelector.setDefaultValue(secondDefaultValue);
}
if(null != this.secondDropdownBeforeEvent){
noSearchSecondSelector.setDropdownBeforeEvent(this.secondDropdownBeforeEvent);
}
secondSelector = noSearchSecondSelector;
firstSelector.addSelectListener(event->{
CLabel itemLabel = (CLabel)event.widget;
DropDownBox.Data data = (Data)itemLabel.getData("data");
List<DropDownBox.Data> secondList = this.linkageSelectEvent.getSecondData(data);
noSearchSecondSelector.setComboDataList(secondList);
});
noSearchSecondSelector.addSelectListener(event->{
CLabel itemLabel = (CLabel)event.widget;
itemLabel.setData("firstSelect", noSearchSecondSelector.getContentComposite().getData("firstSelect"));
itemLabel.setData("secondSelect", noSearchSecondSelector);
});
} if(this.comboRowWidth != 0){
firstSelector.setComboRowWidth(this.comboRowWidth );
secondSelector.setComboRowWidth(this.comboRowWidth );
}
if(this.comboRowHeight != 0){
firstSelector.setComboRowHeight(this.comboRowHeight);
secondSelector.setComboRowHeight(this.comboRowHeight);
} if(null != firsetSelectListener){
firstSelector.addSelectListener(firsetSelectListener);
}
if(null != secondSelectListener){
secondSelector.addSelectListener(secondSelectListener);
} firstSelector.paint();
secondSelector.paint();
firstSelector.getContentComposite().setData("firstSelect", firstSelector);
secondSelector.getContentComposite().setData("firstSelect", firstSelector);
secondSelector.getContentComposite().setData("secondSelect", secondSelector); Label deleteImg = new Label(addRowComposite,SWT.NONE);
GridData gd_deleteImg = new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1);
gd_deleteImg.widthHint = 24;
gd_deleteImg.heightHint = 24;
deleteImg.setLayoutData(gd_deleteImg);
deleteImg.setImage(ImageUtil.getImage(FileUtil.loadResourceFileAsStream(Constants.DELETE_ICON)));
deleteImg.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
deleteImg.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_HAND));
deleteImg.setData("secondSelect", secondSelector); //将第二下拉框绑定到删除图标上
deleteImg.setData("firstSelect", firstSelector); //将第一个下拉框绑定到删除图标上
if(this.deleteBtnListener != null){
deleteImg.addListener(SWT.MouseDown,this.deleteBtnListener);
}
deleteImg.addListener(SWT.MouseDown, new Listener(){
@Override
public void handleEvent(Event event) {
addRowComposite.dispose();
addRowCompositeList.remove(addRowComposite);
reLayout();
}
}); addRowComposite.setData("firstSelect", firstSelector);
addRowComposite.setData("secondSelect", secondSelector); Label mentionLabel = new Label(addRowComposite,SWT.WRAP);
GridData gd_mention = new GridData(SWT.LEFT, SWT.CENTER, false, true, 1, 1);
Rectangle bounds = contentComposite.getBounds();
if(bounds.width == 0){
bounds = contentComposite.getParent().getParent().getBounds();
}
gd_mention.widthHint = bounds.width - this.nameWidth - this.chooseWidth -24-15;
mentionLabel.setLayoutData(gd_mention);
mentionLabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
mentionLabel.setForeground(SWTResourceManager.getColor(51,51,51));
addRowComposite.layout(true);
addRowCompositeList.add(addRowComposite);
} private void reLayout(){
Composite contentComposite = addComposite;
while(contentComposite != this.parent){
contentComposite.layout(true);
contentComposite = contentComposite.getParent();
}
contentComposite.layout(true);
Composite parentComposite = contentComposite.getParent();
while(!(parentComposite instanceof ScrolledComposite) && !(parentComposite instanceof Shell)){
parentComposite.layout(true);
contentComposite = parentComposite;
parentComposite = parentComposite.getParent();
}
if(parentComposite instanceof ScrolledComposite){
((ScrolledComposite)parentComposite).setMinSize(contentComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
} /**
* <p>联动事件</p>
* @version V1.0
*/
public interface DefinedFromAddLinkageSingleSelectEvent{
/*****根据第一个下拉框选择的内容动态生成第二个框选择的内容(仅在第二个下拉框不带搜索功能时需要实现该方法)******/
List<DropDownBox.Data> getSecondData(DropDownBox.Data firstValue);
/*****根据第一个获取其默认已经配置的内容*****/
DropDownBox.Data getSecondDefaultValue(DropDownBox.Data firstValue);
} public int getChooseWidth() {
return chooseWidth;
} public void setChooseWidth(int chooseWidth) {
this.chooseWidth = chooseWidth;
} public int getChooseHeight() {
return chooseHeight;
} public void setChooseHeight(int chooseHeight) {
this.chooseHeight = chooseHeight;
} public int getNameWidth() {
return nameWidth;
} public void setNameWidth(int nameWidth) {
this.nameWidth = nameWidth;
} public int getComboRowWidth() {
return comboRowWidth;
} public void setComboRowWidth(int comboRowWidth) {
this.comboRowWidth = comboRowWidth;
} public int getComboRowHeight() {
return comboRowHeight;
} public void setComboRowHeight(int comboRowHeight) {
this.comboRowHeight = comboRowHeight;
} public boolean isShowValue() {
return showValue;
} public void setShowValue(boolean showValue) {
this.showValue = showValue;
} public List<DropDownBox.Data> getFirstSelectedList() {
return firstSelectedList;
} public void setFirstSelectedList(List<DropDownBox.Data> firstSelectedList) {
this.firstSelectedList = firstSelectedList;
} public boolean isFirstAsynchronous() {
return firstAsynchronous;
} public void setFirstAsynchronous(boolean firstAsynchronous) {
this.firstAsynchronous = firstAsynchronous;
} public String getFirstDefaultMultiSearchMentionHint() {
return firstDefaultMultiSearchMentionHint;
} public void setFirstDefaultMultiSearchMentionHint(String firstDefaultMultiSearchMentionHint) {
this.firstDefaultMultiSearchMentionHint = firstDefaultMultiSearchMentionHint;
} public List<DropDownBox.Data> getFirstDefaultSelectValueList() {
return firstDefaultSelectValueList;
} public void setFirstDefaultSelectValueList(List<DropDownBox.Data> firstDefaultSelectValueList) {
this.firstDefaultSelectValueList = firstDefaultSelectValueList;
} public boolean isSecondAsynchronous() {
return secondAsynchronous;
} public void setSecondAsynchronous(boolean secondAsynchronous) {
this.secondAsynchronous = secondAsynchronous;
} public String getSecondDefaultMultiSearchMentionHint() {
return secondDefaultMultiSearchMentionHint;
} public void setSecondDefaultMultiSearchMentionHint(String secondDefaultMultiSearchMentionHint) {
this.secondDefaultMultiSearchMentionHint = secondDefaultMultiSearchMentionHint;
} public Listener getSecondSelectListener() {
return secondSelectListener;
} public void setSecondSelectListener(Listener secondSelectListener) {
this.secondSelectListener = secondSelectListener;
} public void setNameText(String nameText) {
this.nameText = nameText;
} public void setDeleteBtnListener(Listener deleteBtnListener) {
this.deleteBtnListener = deleteBtnListener;
} public void setLinkageSelectEvent(DefinedFromAddLinkageSingleSelectEvent linkageSelectEvent) {
this.linkageSelectEvent = linkageSelectEvent;
} public void setFirstLinkEvent(StyleTextLink.StyleTextLinkEvent firstLinkEvent) {
this.firstLinkEvent = firstLinkEvent;
} public void setFirstSearchEvent(DefinedSearchSingleSelect.SearchSingleSelectEvent firstSearchEvent) {
this.firstSearchEvent = firstSearchEvent;
} public void setFirsetSelectListener(Listener firsetSelectListener) {
this.firsetSelectListener = firsetSelectListener;
} public void setFirstDropdownBeforeEvent(DefinedCommonSingleSelectEvent firstDropdownBeforeEvent) {
this.firstDropdownBeforeEvent = firstDropdownBeforeEvent;
} public void setSecondLinkEvent(StyleTextLink.StyleTextLinkEvent secondLinkEvent) {
this.secondLinkEvent = secondLinkEvent;
} public void setSecondSearchEvent(DefinedSearchSingleSelect.SearchSingleSelectEvent secondSearchEvent) {
this.secondSearchEvent = secondSearchEvent;
} public void setSecondDropdownBeforeEvent(DefinedCommonSingleSelectEvent secondDropdownBeforeEvent) {
this.secondDropdownBeforeEvent = secondDropdownBeforeEvent;
}
public List<Composite> getAddRowCompositeList() {
return addRowCompositeList;
}
}

4.4

package com.view.control.select;

import java.util.ArrayList;
import java.util.List; import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener; import com.view.control.DefinedControl; /**
* <p>二级联动下拉框</p>
* @version V1.0
*/
public class DefinedSelectedLingageSelector extends DefinedControl{
/****内容容器*****/
private Composite contentComposite;
private DefinedSingleSelect selectFirst;
private DefinedSingleSelect selectSecond;
/****第一级下拉框选项所有内容******/
private List<DropDownBox.Data> comboDataList;
private int firstComboWidth;
private int comboRowWidth;
private int contentWidth = 323;
private int contentHeight = 32;
private Listener firstSelectListener;
private Listener secondSelectListener;
private DropDownBox.Data defaultValue;
private SecondSelectorGenerator secondSelectorGenerator;
private DropDownBox.Data secondDefaultValue; public DefinedSelectedLingageSelector(Composite parent,List<DropDownBox.Data> comboDataList,int comboRowWidth,int firstComboWidth,SecondSelectorGenerator secondSelectorGenerator) {
super(parent);
this.comboDataList = comboDataList;
this.comboRowWidth = comboRowWidth;
this.firstComboWidth = firstComboWidth;
this.secondSelectorGenerator = secondSelectorGenerator;
} @Override
public void paint() {
contentComposite = new Composite(this.parent,SWT.NONE);
contentComposite.setBounds(0, 0, contentWidth, contentHeight);
GridLayout gl_contentComposite = new GridLayout(2,false);
gl_contentComposite.horizontalSpacing = 5;
gl_contentComposite.verticalSpacing = 0;
gl_contentComposite.marginHeight = 0;
contentComposite.setLayout(gl_contentComposite); selectFirst = new DefinedSingleSelect(contentComposite, comboDataList, comboRowWidth, this.contentHeight);
List<DropDownBox.Data> secondDataList = new ArrayList<DropDownBox.Data>();
if(null != defaultValue){
selectFirst.setDefaultValue(defaultValue);
secondDataList = secondSelectorGenerator.getSecondSelectorData(defaultValue.getValue());
}
selectFirst.addSelectListener(new Listener(){
@Override
public void handleEvent(Event event) {
changeSecondSelect(selectFirst.getValue());
}
});
if(this.firstSelectListener != null){
selectFirst.addSelectListener(this.firstSelectListener);
}
selectFirst.paint(); Composite secondSelectComposite = new Composite(contentComposite,SWT.NONE);
GridData gd_secondSelectComposite = new GridData(SWT.LEFT, SWT.FILL, false, true, 1, 1);
gd_secondSelectComposite.widthHint = this.contentWidth - this.firstComboWidth - 5;
secondSelectComposite.setLayoutData(gd_secondSelectComposite);
selectSecond = new DefinedSingleSelect(secondSelectComposite, secondDataList, this.contentWidth - this.firstComboWidth - 5, this.contentHeight);
if(null != secondDefaultValue){
selectSecond.setDefaultValue(secondDefaultValue);
}
if(this.secondSelectListener != null){
selectFirst.addSelectListener(this.secondSelectListener);
}
selectSecond.paint();
} private void changeSecondSelect(String defaultValue){
List<DropDownBox.Data> secondDataList = secondSelectorGenerator.getSecondSelectorData(defaultValue);
selectSecond.setComboDataList(secondDataList);
} public static interface SecondSelectorGenerator{
List<DropDownBox.Data> getSecondSelectorData(String firstValue);
} public int getFirstComboWidth() {
return firstComboWidth;
} public void setFirstComboWidth(int firstComboWidth) {
this.firstComboWidth = firstComboWidth;
} public int getComboRowWidth() {
return comboRowWidth;
} public void setComboRowWidth(int comboRowWidth) {
this.comboRowWidth = comboRowWidth;
} public int getContentWidth() {
return contentWidth;
} public void setContentWidth(int contentWidth) {
this.contentWidth = contentWidth;
} public int getContentHeight() {
return contentHeight;
} public void setContentHeight(int contentHeight) {
this.contentHeight = contentHeight;
} public Composite getContentComposite() {
return contentComposite;
} public DefinedSingleSelect getSelectFirst() {
return selectFirst;
} public DefinedSingleSelect getSelectSecond() {
return selectSecond;
} public void setFirstSelectListener(Listener firstSelectListener) {
this.firstSelectListener = firstSelectListener;
} public void setSecondSelectListener(Listener secondSelectListener) {
this.secondSelectListener = secondSelectListener;
} public void setDefaultValue(DropDownBox.Data defaultValue) {
this.defaultValue = defaultValue;
} public void setSecondSelectorGenerator(SecondSelectorGenerator secondSelectorGenerator) {
this.secondSelectorGenerator = secondSelectorGenerator;
} public void setSecondDefaultValue(DropDownBox.Data secondDefaultValue) {
this.secondDefaultValue = secondDefaultValue;
}
}

4.5

package com.view.control.select;

import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener; import com.view.control.DefinedControl;
import com.view.control.DefinedText;
import com.view.swt.SWTResourceManager;
import com.view.swt.SWTUtil; /**
* <p>选择联动编辑框(parent可以不是GridLayout布局)</p>
* @version V1.0
*/
public class DefinedSelectedLinkageEditor extends DefinedControl{
/****内容容器*****/
private Composite contentComposite;
private DefinedSingleSelect selectFirst;
/****编辑框*****/
private DefinedText editor;
private int contentWidth = 323;
/****选择下拉框内容显示的Label的宽度,那么编辑框的宽度为 contentWidth - comboWidth*****/
private int comboWidth = 100;
/**********/
private int contentHeight = 32;
/*****编辑框中默认显示的内容*****/
private String defaultTextMention;
/*****下拉选择默认选择的值****/
private DropDownBox.Data defaultComoValue;
/*****编辑框中默认值*******/
private String defaultTextValue;
private List<DropDownBox.Data> comboDataList;
private int comboRowWidth;
/***选中第一个下拉框第一个值发生的事件*****/
private Listener firstSelectItemListener; public DefinedSelectedLinkageEditor(Composite parent, List<DropDownBox.Data> comboDataList, int comboRowWidth) {
super(parent);
this.comboDataList = comboDataList;
this.comboRowWidth = comboRowWidth;
} public DefinedSelectedLinkageEditor(Composite parent,List<DropDownBox.Data> comboDataList,int contentWidth,int comboWidth,int contentHeight) {
this(parent,comboDataList,comboWidth);
this.comboWidth = comboWidth;
this.contentWidth = contentWidth;
this.contentHeight = contentHeight;
} @Override
public void paint(){
contentComposite = new Composite(this.parent,SWT.NONE);
contentComposite.setBounds(0, 0, this.contentWidth, this.contentHeight);
SWTUtil.paintBorder(contentComposite, SWTResourceManager.getControlBorderColor());
contentComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
GridLayout gl_contentComposite = new GridLayout(2,false);
gl_contentComposite.horizontalSpacing = 0;
gl_contentComposite.verticalSpacing = 0;
gl_contentComposite.marginHeight = 0;
gl_contentComposite.marginWidth = 0;
contentComposite.setLayout(gl_contentComposite); selectFirst = new DefinedSingleSelect(contentComposite,this.comboDataList,this.comboWidth,this.contentHeight);
if(null != this.defaultComoValue){
selectFirst.setDefaultValue(this.defaultComoValue);
}
selectFirst.setComboRowWidth(comboRowWidth);
selectFirst.addSelectListener(new Listener(){
@Override
public void handleEvent(Event event) {
editor.getContentText().setText("");
}
});
if(null != firstSelectItemListener){
selectFirst.addSelectListener(firstSelectItemListener);
}
selectFirst.paint(); Composite composite = new Composite(contentComposite,SWT.NONE);
GridData gd_composite = new GridData(SWT.RIGHT, SWT.FILL, false, true, 1, 1);
gd_composite.widthHint = this.contentWidth - this.comboWidth;
composite.setLayoutData(gd_composite);
editor = new DefinedText(composite,SWT.NONE);
editor.setTextHeight(this.contentHeight);
editor.setTextWidth(this.contentWidth - this.comboWidth);
editor.setDefalutValue(this.defaultTextValue);
editor.setDefaultTextMention(defaultTextMention);
editor.paint(); contentComposite.layout(true);
} public int getComboWidth() {
return comboWidth;
} public void setComboWidth(int comboWidth) {
this.comboWidth = comboWidth;
} public int getComboRowWidth() {
return comboRowWidth;
} public void setComboRowWidth(int comboRowWidth) {
this.comboRowWidth = comboRowWidth;
} public DefinedSingleSelect getSelectFirst() {
return selectFirst;
} public DefinedText getEditor() {
return editor;
} public void setContentWidth(int contentWidth) {
this.contentWidth = contentWidth;
} public void setContentHeight(int contentHeight) {
this.contentHeight = contentHeight;
} public void setDefaultTextMention(String defaultTextMention) {
this.defaultTextMention = defaultTextMention;
} public void setDefaultComoValue(DropDownBox.Data defaultComoValue) {
this.defaultComoValue = defaultComoValue;
}
public void setDefaultComoValue(String defaultComoValue) {
this.defaultComoValue = new DropDownBox.Data(defaultComoValue,defaultComoValue);
} public void setDefaultTextValue(String defaultTextValue) {
this.defaultTextValue = defaultTextValue;
} public void setComboDataList(List<DropDownBox.Data> comboDataList) {
this.comboDataList = comboDataList;
} public void dispose(){
this.contentComposite.dispose();
} public void setFirstSelectItemListener(Listener firstSelectItemListener) {
this.firstSelectItemListener = firstSelectItemListener;
}
}

自定义SWT控件四之其它下拉框的更多相关文章

  1. Android简易实战教程--第二十二话《自定义组合控件模拟qq登录下拉框和其中的一些”小技巧”》

    转载此文章请注明出处:点击打开链接   http://blog.csdn.net/qq_32059827/article/details/52313516 首先,很荣幸此专栏能被CSDN推荐到主页.荣 ...

  2. GridControl控件绑定RepositoryItemImageComboBox 作为下拉框使用

    如果,时间长时了,已前做过的东西,都记不得了,所以记录一下. 废话不多说. 1.拖出gridview控件,然后将字段绑定上去 2.将要做下拉框的控件加入RepositoryItemImageCombo ...

  3. devpress GridControl控件绑定RepositoryItemImageComboBox 作为下拉框使用 zt

    1.拖出gridview控件,然后将字段绑定上去 2.将要做下拉框的控件加入RepositoryItemImageComboBox控件 3.绑定数据 ; i < ; i++) { //如果取值时 ...

  4. 安卓学习之--UI控件用法 单选 按钮 下拉框

    1.单选 .RadioGroup 可将各自不同的RadioButton ,设限于同一个Radio 按钮组,同一个RadioGroup 组里的按钮,只能做出单一选择(单选题). <RadioGro ...

  5. 自定义SWT控件二之自定义多选下拉框

    2.自定义下拉多选框 package com.view.control.select; import java.util.ArrayList; import java.util.HashMap; im ...

  6. 自定义SWT控件一之自定义单选下拉框

    一.自定义下拉控件 自定义的下拉框,是自定义样式的,其中的下拉框使用的是独立的window,非复选框的下拉框双击单机其它区域或选择完之后,独立window构成的下拉框会自动消失. package co ...

  7. 自定义SWT控件三之搜索功能下拉框

    3.搜索功能下拉弹出框 package com.view.control.select; import java.util.ArrayList; import java.util.LinkedList ...

  8. 吾八哥学Selenium(四):操作下拉框select标签的方法

    我们在做web页面自动化测试的时候会经常遇到<select></select>标签的下拉框,那么在Python里如何实现去操作这种控件呢?今天就给大家分享一下这个玩法.为了让大 ...

  9. 自定义SWT控件六之自定义Tab

    6.自定义tab 本章节提供的自定义tab 分为两类 tab上带删除按钮和添加按钮,可删除tab和添加tab tab不可删除和添加 6.1 不可删除tab package com.view.contr ...

随机推荐

  1. 【Zookeeper02】ZK的作用以及使用

    上一篇介绍了ZK的安装以及集群的搭建,这只能算是个软件安装过程,具体是做什么的.怎么用也没有做解释,这一篇中博主就自己的私人理解简单写一下: 1.是什么: a.Zookeeper是一个分布式协调服务, ...

  2. php实现redis锁机制

    <?php class Redis_lock { public static function getRedis() { $redis = new redis(); $redis->con ...

  3. JS中闭包的介绍

    闭包的概念 闭包就是能够读取其他函数内部变量的函数. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascri ...

  4. Windows 命令行文本操作

    Windows下文件操作,大部分的时候用的都是用Windows 资源管理器(就是双击 “我的电脑” 的时候看到的图形界面). 接下来,以Windows命令行下操作文本为例,看看命令行在操作文件方面有多 ...

  5. KVM web管理工具——WebVirtMgr

    系统环境: [root@kvm-admin ~]# cat /etc/redhat-release CentOS Linux release (Core) 关闭防火墙.selinux [root@kv ...

  6. Tensorflow教程(1)Tensorflow的下载和安装

    人工智能已经成为了目前的大趋势,作为程序员的我们也应该跟着时代进步.Tensorflow作为人工智能领域的重要工具,被广泛的使用在机器学习的应用当中. Tensorflow使用人数众多.社区完善,所以 ...

  7. springboot2.0.4对接redis3.2.12版本哨兵模式

    redis 哨兵模式的创建 1. 下载redis3.2.12版本.https://codeload.github.com/antirez/redis/zip/3.2.12 2.  解压后放到/usr/ ...

  8. git rebase VS git merge? 更优雅的 git 合并方式值得拥有

    写在前面 如果你不能很好的应用 Git,那么这里为你提供一个非常棒的 Git 在线练习工具 Git Online ,你可以更直观的看到你所使用的命令会产生什么效果 另外,你在使用 Git 合并分支时只 ...

  9. 与某公司CTO的一次闲聊

    这是一次与某公司CTO的交流沟通,收获不少,记录下分享给大家,其中个别词句有自己增改成分. 既然是领导,就要学会画饼,画图的都是底下干活的. 管理好别人的预期,并能兑现承诺,不能只靠画大饼忽悠.针对某 ...

  10. 5分钟完成mysql离线安装

    1. 场景描述 mysql离线安装并不复杂,就是经常会出现漏东西,有时候的搞半天,总结下,快速离线安装mysql,直接把下面的命令敲一遍就好,5-10分钟就能安装好. 2. 解决方案 安装的mysql ...