org.eclipse.swt.widgets.Composite setSize 无法正常工作
org.eclipse.swt.widgets.Composite setSize not working properly
我目前正在开发一个自定义插件,我不太明白为什么即使存在其他复合元素,复合元素也会占用所有 space。
我执行插件的处理程序是这样的:
public class IwokGeneratorHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
Shell shell = window.getShell();
ApplicationWindow win = new ApplicationWindow(shell) {
@Override
protected Control createContents(Composite parent) {
parent.setSize(800, 600);
//first panel
Composite composite = new Composite(parent, SWT.NONE);
//x, y, width, height
composite.setBounds(10, 10, 424, 70);
//second panel
Composite composite_1 = new Composite(parent, SWT.NONE);
composite_1.setBounds(10, 86, 424, 309);
//third panel
Composite composite_2 = new Composite(parent, SWT.NONE);
composite_2.setBounds(10, 407, 424, 42);
return parent;
}
};
win.open();
return null;
}
}
但是,第一个 Composite 占用了主应用程序 window 的所有 space,而其他的则无法看到,无论 window 大小如何。我检查了很多次。
我是否缺少任何 属性 以防止元素自动填充?
提前致谢
ApplicationWindow
期望 createContents
方法 return 包含内容中所有控件的单个 Composite
(大多数其他 JFace window 和对话框 类).
所以像这样:
protected Control createContents(final Composite parent) {
parent.setSize(800, 600);
// Main body composite
Composite body = new Composite(parent, SWT.NONE);
//first panel
Composite composite = new Composite(body, SWT.NONE);
//x, y, width, height
composite.setBounds(10, 10, 424, 70);
//second panel
Composite composite_1 = new Composite(body, SWT.NONE);
composite_1.setBounds(10, 86, 424, 309);
//third panel
Composite composite_2 = new Composite(body, SWT.NONE);
composite_2.setBounds(10, 407, 424, 42);
// Return the body
return body;
}
请注意,您的代码也 returning parent
这是错误的 - 它必须是创建的组合。
注意:尽管使用 setBounds
开始时可能看起来很简单,但如果代码 运行 在具有不同字体大小(或控制大小,如果您 运行 在 macOS/Linux/Windows 上)。强烈建议使用布局。
我目前正在开发一个自定义插件,我不太明白为什么即使存在其他复合元素,复合元素也会占用所有 space。
我执行插件的处理程序是这样的:
public class IwokGeneratorHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
Shell shell = window.getShell();
ApplicationWindow win = new ApplicationWindow(shell) {
@Override
protected Control createContents(Composite parent) {
parent.setSize(800, 600);
//first panel
Composite composite = new Composite(parent, SWT.NONE);
//x, y, width, height
composite.setBounds(10, 10, 424, 70);
//second panel
Composite composite_1 = new Composite(parent, SWT.NONE);
composite_1.setBounds(10, 86, 424, 309);
//third panel
Composite composite_2 = new Composite(parent, SWT.NONE);
composite_2.setBounds(10, 407, 424, 42);
return parent;
}
};
win.open();
return null;
}
}
但是,第一个 Composite 占用了主应用程序 window 的所有 space,而其他的则无法看到,无论 window 大小如何。我检查了很多次。
我是否缺少任何 属性 以防止元素自动填充?
提前致谢
ApplicationWindow
期望 createContents
方法 return 包含内容中所有控件的单个 Composite
(大多数其他 JFace window 和对话框 类).
所以像这样:
protected Control createContents(final Composite parent) {
parent.setSize(800, 600);
// Main body composite
Composite body = new Composite(parent, SWT.NONE);
//first panel
Composite composite = new Composite(body, SWT.NONE);
//x, y, width, height
composite.setBounds(10, 10, 424, 70);
//second panel
Composite composite_1 = new Composite(body, SWT.NONE);
composite_1.setBounds(10, 86, 424, 309);
//third panel
Composite composite_2 = new Composite(body, SWT.NONE);
composite_2.setBounds(10, 407, 424, 42);
// Return the body
return body;
}
请注意,您的代码也 returning parent
这是错误的 - 它必须是创建的组合。
注意:尽管使用 setBounds
开始时可能看起来很简单,但如果代码 运行 在具有不同字体大小(或控制大小,如果您 运行 在 macOS/Linux/Windows 上)。强烈建议使用布局。