Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ComboBoxCellEditor不会更改标签_Java_Eclipse_Swt - Fatal编程技术网

Java ComboBoxCellEditor不会更改标签

Java ComboBoxCellEditor不会更改标签,java,eclipse,swt,Java,Eclipse,Swt,我目前正在开发一个Eclipse4 RCP应用程序,并尝试获得一个带有两列的JFace,其中一列上有一个可选的 一个大问题是:如果我从组合框中选择一个值,列的标签不会改变。如果我再次单击组合框,它将显示应该显示的值 例如,如果我可以选择“Expr”和“String”,而当前选择是“Expr”,如果我从组合框中选择“String”并单击其他地方,组合框仍然显示“Expr”。如果我再次单击组合框并将其聚焦,它将显示“String”。如果我再次单击其他地方,它仍然显示“Expr” 我使用几个类来运行表

我目前正在开发一个Eclipse4 RCP应用程序,并尝试获得一个带有两列的JFace,其中一列上有一个可选的

一个大问题是:如果我从组合框中选择一个值,列的标签不会改变。如果我再次单击组合框,它将显示应该显示的值

例如,如果我可以选择“Expr”和“String”,而当前选择是“Expr”,如果我从组合框中选择“String”并单击其他地方,组合框仍然显示“Expr”。如果我再次单击组合框并将其聚焦,它将显示“String”。如果我再次单击其他地方,它仍然显示“Expr”

我使用几个类来运行表

我的模型课:

私有字符串元素;
私有字符串类型;
公共TableModelElement(字符串元素,字符串类型){
this.element=元素;
this.type=type;
}
公共TableModelElement(字符串元素){
这个(元素,SetTypeEnum.SET_TYPE_STRING.toString());
}
公共TableModelElement(){
this(“,SetTypeEnum.SET_TYPE_STRING.toString());
}
//和Getter/Setter
我的SetTypeEnum:

public enum SetTypeEnum{
SET_TYPE_EXPR(“EXPR”)、SET_TYPE_STRING(“STRING”);
私有最终字符串集合类型;
私有SetTypeEnum(字符串setType){
this.setType=setType;
}
@凌驾
公共字符串toString(){
返回集合类型;
}
公共静态字符串[]toArray(){
字符串[]值=新字符串[SetTypeEnum.values().length];
int i=0;
for(SetTypeEnum值:SetTypeEnum.values()){
if(i
TableViewer启动器:

公共类可设置{
私人桌面查看器;
私人桌面布局;
private TableViewer Column colElementText;
private TableViewer Column colElementType;
公共可设置(复合父级){
布局=新的TableLayout();
布局。添加ColumnData(新ColumnWeightData(3));
布局。添加ColumnData(新ColumnWeightData(1));
Table Table=新表(父表,SWT.BORDER | SWT.FULL|u选择
|SWT.V_卷轴);
表.setLinesVisible(真);
表.setheadervible(true);
表2.setLayout(布局);
查看器=新的TableViewer(表);
viewer.getControl().setLayoutData(
新的GridData(SWT.FILL,SWT.FILL,true,true,1,1));
colElementText=新的TableViewerColumn(查看器,SWT.NONE);
colElementText.getColumn().setResizeable(true);
colElementText.getColumn().setText(“Wert”);
colElementType=新的TableViewerColumn(查看器,SWT.NONE);
colElementType.getColumn().setResizeable(false);
colElementType.getColumn().setText(“类型”);
EditingSupport示例EditingSupport=新设置表EditingSupport(
colElementType.getViewer());
colElementType.setEditingSupport(例如EditingSupport);
setContentProvider(新的ArrayContentProvider());
setLabelProvider(新的SetTableLabelProvider());
TableModelElement[]模型=新的TableModelElement[]{
新的TableModelElement(“Test1”,
SetTypeEnum.SET_TYPE_EXPR.toString()),
新的TableModelElement(“Test2”,
SetTypeEnum.SET_TYPE_EXPR.toString())};
viewer.setInput(模型);
}
以及编辑支持:

公共类SetTableEditingSupport扩展了EditingSupport{
private ComboBoxViewerCellEditor cellEditor=null;
公共设置表编辑支持(ColumnViewer colViewer){
超级(colViewer);
cellEditor=new ComboBoxViewerCellEditor((复合)getViewer()
.getControl(),SWT.READ_);
setLabelProvider(新的LabelProvider());
setContentProvider(新的ArrayContentProvider());
setInput(SetTypeEnum.toArray());
}
@凌驾
受保护的CellEditor getCellEditor(最终对象元素){
返回单元格编辑器;
}
@凌驾
受保护的布尔canEdit(对象元素){
返回true;
}
@凌驾
受保护对象getValue(对象元素){
if(TableModelElement的元素实例){
TableModelElement数据=(TableModelElement)元素;
返回data.getType();
}
返回null;
}
@凌驾
受保护的void setValue(对象元素、对象类型){
if(元素instanceof tablemodellement&&type instanceof String){
TableModelElement数据=(TableModelElement)元素;
字符串newType=(字符串)类型;
/*仅当新值与旧值不同时才设置新值*/
如果(!data.getType().equals(newType)){
data.setType(newType);
//字符串[]项=((CCombo)cellEditor.getControl()).getItems();

//对于编辑支持
setValue
方法调用中的(int i=0;i):

getViewer().update(元素,null);
把这个放在你的电话后面:

data.setType(newType);
这会告诉表查看器它需要从内容提供程序更新元素