gpt4 book ai didi

java - 在 Eclipse 文本编辑器中创建工具栏

转载 作者:行者123 更新时间:2023-11-30 04:49:22 24 4
gpt4 key购买 nike

我有一个 Eclipse 插件,其中我需要在文本编辑器中提供一个工具栏,就像切换面包屑 View 一样。 Eclipse 中是否有任何通用实用程序类允许我执行此操作?

@Override
protected ISourceViewer createSourceViewer(Composite parent,
IVerticalRuler ruler,
int styles)
{
composite = new Composite(parent, SWT.NONE);
GridLayout gridLayout = new GridLayout(1, true);
gridLayout.numColumns = 1;
gridLayout.marginHeight = 0;
gridLayout.marginWidth = 0;
composite.setLayout(gridLayout);

ToolBar toolBar = new ToolBar(composite, SWT.FLAT);
GridData gridData = new GridData(GridData.FILL, SWT.TOP, true, false);
toolBar.setLayoutData(gridData);
toolBarManager = new ToolBarManager(toolBar);

return super.createSourceViewer(composite, ruler, styles);
}

最佳答案

托尼的回答很好,但有时
super.createSourceViewer(复合、标尺、样式);
将更改父级的布局,真正的编辑器区域将丢失,正如 RTA 在托尼的回答中评论的那样。
当我想做 RTA 那样的事情时,我遇到了这个问题。
这是我的解决方案:

@Override
protected ISourceViewer createSourceViewer(Composite parent,
IVerticalRuler ruler, int styles) {
changeParentLayout(parent);
Label label = createPathLabel(parent);
ISourceViewer viewer = super.createSourceViewer(parent, ruler, styles);
updateSourceViewerLayout(parent, label);
return viewer;
}

//change the parent layout to grid layout,
//so that the source file area can be shown
protected void changeParentLayout(Composite parent) {
parent.setLayout(new GridLayout(1, false));
}

//i need a label here, ToolBar will be the same
protected Label createPathLabel(Composite parent) {
Label lblNewLabel = new Label(parent, SWT.NONE);
lblNewLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false, 1, 1));
lblNewLabel.setText(getFilePath());
return lblNewLabel;
}

//after adding the label i need and call super.createSourceViewer()
//now all widgets are ready, we need to change the editor area's layout data to grid data
//here if you only have two widgets: label and area, you can directly choose the edit area widget. i used a loop to find all sub widgets
protected void updateSourceViewerLayout(Composite parent, Label label) {
Control[] children = parent.getChildren();
if (children.length < 2) return;
for (Control child : children) {
if (child != label) {
child.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
}
}
}

private String getFilePath() {
//get the path I want
return "";
}

关于java - 在 Eclipse 文本编辑器中创建工具栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10186515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com