在我的主要dailog中,我有一个JFace TableViewer。该表的最后一列是ComboBoxCellEditor。他们可以选择No,Yes,Both。这一切都按设计工作。
但这是我的问题。
表示例
从 -
1002 | 001 | sss | part | both(user changed from default)
到 -
1002 | 001 | sss | part | No
1002 | 001 | sss | part | Yes
我试图找出两者之后如何运行该方法来完成剩下的工作。我假设它必须是某种倾听者。请查看我的EditingSupport代码,并告诉我在哪里开始我的方法来完成剩下的工作。
public class OptionEditingSupport extends EditingSupport
{
private ComboBoxCellEditor cellEditor;
public OptionEditingSupport(ColumnViewer viewer) {
super(viewer);
cellEditor = new ComboBoxCellEditor(((TableViewer)viewer).getTable(), new String[]{"No", "Yes", "Both"}, SWT.DROP_DOWN);
//cellEditor.setValue(0);
}
protected CellEditor getCellEditor(Object element) {
return cellEditor;
}
protected boolean canEdit(Object element) {
return true;
}
protected Object getValue(Object element) {
return 0;
}
protected void setValue(Object element, Object value)
{
if((element instanceof AplotDatasetData) && (value instanceof Integer)) {
Integer choice = (Integer)value;
//String option = (choice == 0? "Yes":"No":"Both");
String option = ((AplotDatasetData)element).getMarkupValue();;
if(choice == 0) {
option = "No";
}
else if(choice == 1) {
option = "Yes";
}
else {
option = "Both";
}
((AplotDatasetData)element).setMarkupValue(option);
getViewer().update(element, null);
}
}
}
答案 0 :(得分:1)
据我了解您的问题,您希望复制其中一个对象,将其添加到模型中并刷新查看器。
当用户在组合框中选择"both"
时,所有这一切都应该发生。你知道,当发生这种情况时。您最终会遇到else
方法setValue
的情况。然后你可以做你必须做的事情:
protected void setValue(Object element, Object value)
{
if((element instanceof AplotDatasetData) && (value instanceof Integer)) {
Integer choice = (Integer)value;
String option = ((AplotDatasetData)element).getMarkupValue();
if(choice == 0) {
option = "No";
}
else if(choice == 1) {
option = "Yes";
}
else {
option = "Both";
// create a copy of your element
// add it to your model
// update the viewer
}
getViewer().update(element, null);
}
}