Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
eclipse swt标题阅读额外垂直空间_Eclipse_Swt - Fatal编程技术网

eclipse swt标题阅读额外垂直空间

eclipse swt标题阅读额外垂直空间,eclipse,swt,Eclipse,Swt,我试图创建一个非常基本的对话框来扩展TitlearReadialog,它创建了一个额外的垂直空间,令人沮丧,我似乎无法找到创建这个空间的原因并阻止它发生。下面是一个屏幕截图和代码 import org.eclipse.jface.dialogs.IMessageProvider; 导入org.eclipse.jface.dialogs.titleareadalog; 导入org.eclipse.swt.swt; 导入org.eclipse.swt.graphics.Rectangle; 导入o

我试图创建一个非常基本的对话框来扩展TitlearReadialog,它创建了一个额外的垂直空间,令人沮丧,我似乎无法找到创建这个空间的原因并阻止它发生。下面是一个屏幕截图和代码

import org.eclipse.jface.dialogs.IMessageProvider;
导入org.eclipse.jface.dialogs.titleareadalog;
导入org.eclipse.swt.swt;
导入org.eclipse.swt.graphics.Rectangle;
导入org.eclipse.swt.layout.GridData;
导入org.eclipse.swt.layout.GridLayout;
导入org.eclipse.swt.widgets.Composite;
导入org.eclipse.swt.widgets.Control;
导入org.eclipse.swt.widgets.Display;
导入org.eclipse.swt.widgets.Label;
导入org.eclipse.swt.widgets.Shell;
导入org.eclipse.swt.widgets.Text;
公共类ImageDialog扩展了TitlearReadialog{
公共图像对话框(Shell arg0){
超级(arg0);
}
@凌驾
受保护的无效配置外壳(外壳){
super.configureShell(shell);
Display=Display.getCurrent();
矩形边界=display.getPrimaryMonitor().getBounds();
矩形rect=shell.getBounds();
intx=bounds.x+(bounds.width-rect.width)/2;
int y=bounds.y+(bounds.height-rect.height)/2;
外壳设置位置(x,y);
}
@凌驾
受保护的void setshell样式(int arg0){
super.setshell样式(SWT.CLOSE | SWT.MODELESS | SWT.BORDER | SWT.TITLE);
输入锁定打开(假);
}
私有文本txtLink;
私有字符串链接;
@凌驾
公共void create(){
super.create();
setTitle(“输入图像url”);
setMessage(“有效格式为.gif、.jp(e)g、.bmp、.png”,IMessageProvider.INFORMATION);
}
@凌驾
受保护的控件createDialogArea(复合父级){
//复合区域=(复合)super.createDialogArea(父级);
复合容器=新复合(父级,SWT.NONE);
setLayoutData(新的GridData(GridData.FILL_HORIZONTAL));
GridLayout=新的GridLayout(2,false);
//setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,true));
容器。设置布局(布局);
createLinkText(容器);
返回父母;
}
专用void createLinkText(复合容器){
标签lbtLink=新标签(容器,SWT.NONE);
setText(“链接:”);
GridData数据链接=新的GridData();
dataLink.grabeExcessHorizontalSpace=true;
dataLink.horizontalAlignment=GridData.FILL;
txtLink=新文本(容器,SWT.BORDER);
setLayoutData(数据链路);
}
@凌驾
受保护的空文件(){
System.out.println(getInitialSize());
this.link=txtLink.getText();
super.okPressed();
}
公共字符串getLink(){
返回链接;
}
} 

在swt中创建布局对我来说总是一场战斗,非常感谢您的帮助。

您需要使用由
super.createDialogArea
返回的
复合

@覆盖
受保护的控件createDialogArea(复合父级){
复合区域=(复合)super.createDialogArea(父级);
复合材料容器=新复合材料(面积,SWT.NONE);
setLayoutData(新的GridData(GridData.FILL_HORIZONTAL));
GridLayout=新的GridLayout(2,false);
setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,true));
容器。设置布局(布局);
createLinkText(容器);
返回父母;
}

您需要使用由
super.createDialogArea
返回的
组合:

@覆盖
受保护的控件createDialogArea(复合父级){
复合区域=(复合)super.createDialogArea(父级);
复合材料容器=新复合材料(面积,SWT.NONE);
setLayoutData(新的GridData(GridData.FILL_HORIZONTAL));
GridLayout=新的GridLayout(2,false);
setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,true));
容器。设置布局(布局);
createLinkText(容器);
返回父母;
}
可以在
标题leareadalog.getInitialSize()中找到“罪犯”。它使用一些硬编码常量作为最小大小

根据您希望对话框的外观,有几种解决方案:

  • 重写
    getInitialSize()
    并指定所需的大小
  • 重写
    initializeBounds()
    并设置自己的大小,或者调用
    this.getShell().pack()
    。在这种情况下,不要忘记首先调用
    super.initializeBounds()
    ,因为从代码中我看到,它似乎不仅仅是初始化边界
可以在
标题leareadialog.getInitialSize()中找到“罪犯”。它使用一些硬编码常量作为最小大小

根据您希望对话框的外观,有几种解决方案:

  • 重写
    getInitialSize()
    并指定所需的大小
  • 重写
    initializeBounds()
    并设置自己的大小,或者调用
    this.getShell().pack()
    。在这种情况下,不要忘记首先调用
    super.initializeBounds()
    ,因为从代码中我看到,它似乎不仅仅是初始化边界

没有骰子。起初我有那个复合材料,但我认为这是造成额外空间的原因,所以我把它去掉了。但是,这两种方式似乎都没有什么不同。没有骰子。起初我有那个复合材料,但我认为这是造成额外空间的原因,所以我把它去掉了。不过,这两种方法似乎都没有什么不同。谢谢,我最终覆盖了initializeBounds()并使用了getShell().pack。非常有用。谢谢,我最终覆盖了initializeBounds()并使用了getShell().pack。工作起来很有魅力。