Java 为什么在Eclipse3.2插件中添加项目会弄乱工具栏?
我正在进行一项增强,为Eclipse插件的工具栏添加按钮。这项技术相当陈旧。我正在使用IBMRationalApplicationDeveloper7.0.10。以下是我所看到的版本Java 为什么在Eclipse3.2插件中添加项目会弄乱工具栏?,java,eclipse-plugin,eclipse-rcp,jface,Java,Eclipse Plugin,Eclipse Rcp,Jface,我正在进行一项增强,为Eclipse插件的工具栏添加按钮。这项技术相当陈旧。我正在使用IBMRationalApplicationDeveloper7.0.10。以下是我所看到的版本 JDK 1.5 Eclipse Platform 3.2.2 Eclipse Plugin Development 3.2.1 Eclipse RCP 3.2.2 当我的代码向工具栏添加一个新按钮时,它会弄乱工具栏。它只显示部分按钮,隐藏其余按钮。但是当我调整视图的大小时,即使是最微小的一点,所有的按钮都会显示出
JDK 1.5
Eclipse Platform 3.2.2
Eclipse Plugin Development 3.2.1
Eclipse RCP 3.2.2
当我的代码向工具栏添加一个新按钮时,它会弄乱工具栏。它只显示部分按钮,隐藏其余按钮。但是当我调整视图的大小时,即使是最微小的一点,所有的按钮都会显示出来。这似乎不是一个屏幕不动产的例子,因为放大视图并没有帮助。我是Eclipse插件开发的新手,所以我不确定是什么导致了这种情况。我似乎正在做需要添加按钮的事情。我尝试过不同的方法,比如用insertBefore代替add等等。但似乎没有任何帮助
我使用Eclipse附带的示例插件编写了一些测试代码来隔离这个问题,但没有成功。我已经给出了两个类的代码
// This class is generated from Elipse, to which I have added code
public class MenuBarTestView extends ViewPart {
// Instance variables ...
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
drillDownAdapter = new DrillDownAdapter(viewer);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setSorter(new NameSorter());
viewer.setInput(getViewSite());
// Selection change listener, which adds a button to tool bar
// I added the following line
viewer.addSelectionChangedListener(new TreeSelectionChangedListener(this));
makeActions();
hookContextMenu();
hookDoubleClickAction();
contributeToActionBars();
}
.
. // Other Eclipse generated code for the sample plugin goes here
.
.
// I added this method to add a button
public void addButton () {
IActionBars bars = getViewSite().getActionBars();
IToolBarManager tbm = bars.getToolBarManager();
Action action = new Action() {
public void run() {
showMessage("Action 1 executed");
}
};
action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER));
tbm.add(action);
tbm.update(false);
}
}
我为选择更改事件编写了以下类
package menubartest.views;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
public class TreeSelectionChangedListener implements ISelectionChangedListener {
private MenuBarTestView view;
public TreeSelectionChangedListener(MenuBarTestView view) {
super();
this.view = view;
}
public void selectionChanged(SelectionChangedEvent event) {
// TODO Auto-generated method stub
view.addButton();
}
}
当应用程序启动时
这取决于树上的选择
这是一次非常轻微的调整之后
有人能帮忙吗?看起来您需要在添加到工具栏后调用iactionbar.updateActionBars方法。这似乎是Eclipse 3.2或至少是与RAD 7.0捆绑的版本的一个bug。我在Eclipse3.7中尝试了这一点,但没有发现问题。我用addButton方法中的bar.updateActionBars替换了tbm.update,但没有任何帮助。我还尝试在bars.updateActionBars之后调用tbm.update。这也无济于事。查看Eclipse源代码,我真的找不到任何与此类似的地方-通常所有按钮都在视图初始化期间添加到工具栏,并根据需要启用/禁用。这可能是真的。我需要添加/删除按钮。我已经为此挣扎了一段时间。如果我删除所有按钮removeAll,在ToolBarManager上执行更新,然后重新添加按钮,然后在ToolBarManager上执行另一次更新,那么它就可以工作了。但是,这会使工具栏刷新,并且非常明显。