有没有办法设置复合的最大尺寸?只有我找到的方法
setMinimumSize(Point point)
setSize(Point point)
Run Code Online (Sandbox Code Playgroud)
这允许我设置最小和首选大小.
据我所知,没有布局,有最大尺寸的设置,这在我看来是一件好事.
考虑以下SZENARIO:您可以设置的最大尺寸Widget/ Composite到你认为"很好看"的值.根据最终用户的屏幕分辨率和文本大小,所选的最大大小可能看起来不对.这就是布局通常适应可用空间的原因.
不过,这里有一些限制大小的代码:
public static void main(String[] args)
{
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new GridLayout(1, false));
final Button left = new Button(shell, SWT.PUSH);
left.setText("Restricted width");
left.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
left.addListener(SWT.Resize, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
Point size = left.getSize();
if(size.x > 200)
{
left.setSize(200, size.y);
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
Run Code Online (Sandbox Code Playgroud)
在调整大小之前:

调整大小后:

我很好奇你为什么要设置最大尺寸.你能举个具体的例子吗?我有一个情况,我想要这个选项,但我想出了一个解决方案,这甚至更好.只需考虑布局中的小部件,该小部件具有基于其内容的首选大小,例如文本小部件.现在你希望那个小部件和可用空间一样大.但由于该窗口小部件根据其内容声明了空间,因此可能会占用更多空间.所以我需要的是最大尺寸,但如果有更多空间可用,那么该小部件仍然可以占用空间而不需要更多.
但是让我们来看一个例子:
public static void main(final String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
final Text text = new Text(shell, SWT.WRAP | SWT.MULTI | SWT.V_SCROLL);
text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
text.setText(getLongText());
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
Run Code Online (Sandbox Code Playgroud)
打电话给 shell.pack()将使shell使用首选大小来显示其内容.然后布局将要求文本小部件计算其首选大小.文本小部件不知道,shell也将被展开,并且没有固定的大小.
如果我们可以给文本小部件一个最大的大小,这个问题就可以解决了.但是它会引起网格布局的另一个问题,因为我们不希望文本小部件变小,以防shell的最小大小大于文本小部件的首选大小.我不能给你一个这种情况的代码示例,因为没有最大大小,但只是想象shell具有固定大小,并且里面的文本小部件具有更小的最大大小.
解决方案是将小部件计算的首选大小限制为最大首选大小.我没有找到设置此值的方法,但您可以通过覆盖窗口小部件的computeSize方法来实现此效果:
final Text text = new Text(shell, SWT.WRAP | SWT.MULTI | SWT.V_SCROLL) {
/** The maximum preferred size. */
private final Point maxSize = new Point(500, 400);
@Override
public Point computeSize(final int wHint, final int hHint, final boolean changed) {
final Point preferredSize = super.computeSize(wHint, hHint, changed);
return new Point(Math.min(maxSize.x, preferredSize.x), Math.min(maxSize.y, preferredSize.y));
}
@Override
protected void checkSubclass() {
// noop, allow subclassing, since we know what we are doing
}
};
Run Code Online (Sandbox Code Playgroud)
现在您仍然可以通过用户拖动操作来增加外壳尺寸,并且小部件仍然可以获得超过最大尺寸的更多空间.
| 归档时间: |
|
| 查看次数: |
11656 次 |
| 最近记录: |