Eclipse plugin Eclipse JFace Treeviewer视图在调用setSelection时未选择
我的eclipse插件中有一个带有treeviewer的视图,我正在尝试使用iSelectService根据编辑器中的选择在treeviewer中选择一行。我能够找到必须选择的元素,并在下面的代码段中尝试了以下操作:Eclipse plugin Eclipse JFace Treeviewer视图在调用setSelection时未选择,eclipse-plugin,eclipse-rcp,jface,Eclipse Plugin,Eclipse Rcp,Jface,我的eclipse插件中有一个带有treeviewer的视图,我正在尝试使用iSelectService根据编辑器中的选择在treeviewer中选择一行。我能够找到必须选择的元素,并在下面的代码段中尝试了以下操作: v.setExpandedState(file, true); v.refresh(); v.setSelection(new StructuredSelection(iDialogSettings), true); 我还检查了视图的Contentprovider,它正在返回
v.setExpandedState(file, true);
v.refresh();
v.setSelection(new StructuredSelection(iDialogSettings), true);
我还检查了视图的Contentprovider,它正在返回正确的父元素
我做错了什么?我还需要检查和尝试什么
我查看了以下帖子:
编辑:
视图-
public class Objects extends ViewPart {
public static final String ID = "suitacore.views.Objects"; //$NON-NLS-1$
private TreeViewer v = null;
private Tree tree;
private List <IFile> outer;
private Action groupByDate;
public Objects() {
}
private void resizeTable(Tree table_) {
for (TreeColumn tc : table_.getColumns())
tc.pack();
}
/**
* Create contents of the view part.
* @param parent
*/
@Override
public void createPartControl(Composite parent) {
v = new TreeViewer(parent, SWT.FULL_SELECTION | SWT.V_SCROLL
| SWT.H_SCROLL | SWT.BORDER);
tree = v.getTree();
v.getTree().setLinesVisible(true);
v.getTree().setHeaderVisible(true);
v.getTree().setFont((new Font(null, "Calibri", 11, SWT.CENTER)));
String[] columLabels = {
" ObjectMaps ",
"ObjectReference",
"ObjectTagName",
"ObjectIDAttribute",
"ObjectNameAttribute",
"ObjectXPathAttribute",
"ObjectClassAttributes",
" ObjectText " ,
"MoreAttributes"};
for (int i = 0; i < columLabels.length; i++) {
TreeViewerColumn column = new TreeViewerColumn(v, SWT.NONE);
column.getColumn().setWidth(100);
column.getColumn().setMoveable(true);
column.getColumn().setText(columLabels[i]);
if (i == 1) {
column.setEditingSupport(new ObjectsViewTextCellEditingSupport(v));
}
}
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject projects[] = root.getProjects();
outer = new ArrayList<IFile>();
for (IProject iProject : projects) {
IFolder objectMap = iProject.getFolder(ProjectConstants.objectMap);
if (null != objectMap) {
try {
for (IResource iResource : objectMap.members()) {
if (iResource instanceof IFile) {
IFile file = (IFile) iResource;
if (file.getFileExtension().equals("xml")) {
outer.add(file);
}
}
}
} catch (CoreException e) {
e.printStackTrace();
}
}
}
v.setContentProvider(new ObjectViewContentProvider(outer));
v.setLabelProvider(new ObjectViewLabelProvider());
v.setInput(outer);
createActions();
initializeToolBar();
initializeMenu();
resizeTable(tree);
getSite().setSelectionProvider(v);
ISelectionService ss = getSite().getWorkbenchWindow().getSelectionService();
ss.addPostSelectionListener(listener);
}
private Object searchObjectfromID(String objectID) {
Object iSection = null;
for (IFile file : outer) {
if (file.getFileExtension().equalsIgnoreCase("xml")) {
DialogSettings settings = new DialogSettings("root");
try {
settings.load(file.getLocation().toString());
IDialogSettings sections[] = settings.getSections();
for (IDialogSettings iDialogSettings : sections) {
if (iDialogSettings.getName().equals(objectID)) {
System.out.println("Dialog setting for the element>" + iDialogSettings.getName());
v.setExpandedState(file, true);
//v.setSelection(new StructuredSelection(file), true);
v.setSelection(new StructuredSelection(iDialogSettings), true);
v.refresh(true);
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return iSection;
}
/* adding listeners*/
private ISelectionListener listener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection) {
if (sourcepart != Objects.this) {
System.out.println("printing selection for object view ..." + selection);
if (selection instanceof IStructuredSelection) {
IStructuredSelection ss = (IStructuredSelection) selection;
Object element = ss.getFirstElement();
System.out.println("printing selected element for object view ..." + element);
if (element instanceof CSVRow) {
CSVRow row = (CSVRow) element;
System.out.println("here is our obejct id in the obejct view" + row.getElementAt(2));
final String objectID= row.getElementAt(2);
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
public void run() {
searchObjectfromID(objectID);
}
});
}
}
}
}
};
/**
* Create the actions.
*/
private void createActions() {
// Create the actions
}
/**
* Initialize the toolbar.
*/
private void initializeToolBar() {
IToolBarManager toolbarManager = getViewSite().getActionBars()
.getToolBarManager();
}
/**
* Initialize the menu.
*/
private void initializeMenu() {
IMenuManager menuManager = getViewSite().getActionBars()
.getMenuManager();
}
@Override
public void setFocus() {
// Set the focus
}
}
公共类对象扩展了ViewPart{
public static final String ID=“suitacore.views.Objects”;//$NON-NLS-1$
私有TreeViewer v=null;
私家树;
私人名单;
私人行动分组日期;
公共对象(){
}
私有void可调整大小(树表){
for(treecocolumn tc:table_u.getColumns())
tc.pack();
}
/**
*创建视图零件的内容。
*@param父级
*/
@凌驾
公共void createPartControl(复合父级){
v=新树视图(父级,SWT.FULL|U选择| SWT.v|U滚动
|SWT.H|U卷轴(SWT.边框);
tree=v.getTree();
v、 getTree().setLinesVisible(true);
v、 getTree().setheadervible(true);
v、 getTree().setFont((新字体(null,“Calibri”,11,SWT.CENTER));
字符串[]columLabels={
“对象映射”,
“对象引用”,
“对象标记名”,
“客观属性”,
“ObjectNameAttribute”,
“ObjectXPathAttribute”,
“ObjectClassAttributes”,
“ObjectText”,
“更多属性”};
对于(int i=0;i”+iDialogSettings.getName());
v、 setExpandedState(文件,true);
//v、 setSelection(新结构选择(文件),true);
v、 setSelection(新结构选择(iDialogSettings),true);
v、 刷新(真);
打破
}
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
回程截取;
}
/*添加侦听器*/
私有ISelectionListener=新ISelectionListener(){
公共无效选择已更改(IWorkbenchPart源部件,ISelection选择){
if(sourcepart!=Objects.this){
System.out.println(“对象视图打印选择…”+选择);
if(IStructuredSelection的选择实例){
IStructuredSelection ss=(IStructuredSelection)选择;
Object元素=ss.getFirstElement();
System.out.println(“打印对象视图的选定元素…”+元素);
if(CSVRow的元素实例){
CSVRow行=(CSVRow)元素;
println(“这是obejct视图中的obejct id”+row.getElementAt(2));
最终字符串objectID=row.getElementAt(2);
PlatformUI.getWorkbench().getDisplay().asyncExec(新的Runnable(){
公开募捐{
searchObjectfromID(objectID);
}
public class ObjectViewContentProvider implements ITreeContentProvider {
private List <IFile> outer;
public ObjectViewContentProvider(List<IFile> outer) {
super();
this.outer = outer;
}
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public Object[] getElements(Object inputElement) {
return ((List) inputElement).toArray();
}
@Override
public Object[] getChildren(Object parentElement) {
Object obj[] = null;
if (parentElement instanceof IFile) {
System.out.println("get children called ObejctVewContentProvider......." + parentElement);
IFile file = (IFile) parentElement;
if (file.getFileExtension().equalsIgnoreCase("xml")) {
DialogSettings rootSection = new DialogSettings("root");
try {
rootSection.load(file.getLocation().toString());
obj = rootSection.getSections();
System.out.println("no of childeren for file parent>>" + obj.length );
}
catch (IOException e) {
e.printStackTrace();
}
}
}
else if (parentElement instanceof IDialogSettings) {
/*System.out.println("get children called ObejctVewContentProvider......." + parentElement);
IDialogSettings objects = (IDialogSettings) parentElement;
obj = objects.getSections();
System.out.println("no of childeren for IDialogsettings parent>>" + obj.length );*/
}
return obj;
}
@Override
public Object getParent(Object element) {
IFile ifile = null;
System.out.println("get parent called ObejctVewContentProvider........................" + element);
if (element instanceof IDialogSettings) {
System.out.println("ObejctVewContentProvider......>>>" + element);
IDialogSettings section = (IDialogSettings) element;
for (IFile file : outer) {
if (file.getFileExtension().equalsIgnoreCase("xml")) {
DialogSettings settings = new DialogSettings("root");
try {
settings.load(file.getLocation().toString());
IDialogSettings sections[] = settings.getSections();
for (IDialogSettings iDialogSettings : sections) {
if (iDialogSettings.getName().equals(section.getName())) {
ifile = file;
System.out.println("Returning parent for section >>" + ifile);
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
else if (element instanceof DialogSettings) {
System.out.println("ObejctVewContentProvider......<<<<<<<<<<<<<<<<<<<<<<<<<<<" + element);
}
return ifile;
}
@Override
public boolean hasChildren(Object element) {
Object[] obj = getChildren(element);
return obj == null ? false : obj.length > 0;
}
}
public boolean equals(Object a, Object b);
public int hashCode(Object element);