当前位置: 首页 > 面试题库 >

为什么SWT Composite有时需要调用resize()才能正确布局?

尉迟鑫鹏
2023-03-14
问题内容

有时,我们遇到一个SWT复合材料,它绝对拒绝正确布局自己。当我们在复合体上调用dispose然后将其替换为另一个时,常常会遇到这种情况。尽管似乎并不严格限于这种情况。

当我们遇到这个问题,约50%的时间,我们可以调用pack()layout()对违规复合材料,并且一切都会好起来。但是,大约有50%的时间,我们必须这样做:

Point p = c.getSize();
c.setSize(p.x+1, p.y+1);
c.setSize(p);

布局管理器之类的每一种组合都曾经发生过这种情况。

我希望我有一个很好的,简单的,可复制的案例,但我没有。我希望有人会意识到这个问题,然后说:“嗯,你想念xyz…。”


问题答案:

在我看来, 布局的缓存已过时,需要刷新

SWT中的布局支持缓存,并且通常会缓存控件的首选大小,或者它们想要缓存的内容:

public abstract class Layout {
    protected abstract Point computeSize (Composite composite, int wHint, int hHint, boolean flushCache);
    protected boolean flushCache (Control control) {...}
    protected abstract void layout (Composite composite, boolean flushCache);
}

我对SWT编程(以前的Swing程序员)比较陌生,但是遇到类似的情况,其中布局没有正确更新。我通常能够使用 其他
布局方法来解决它们,这也会导致布局刷新其缓存:

layout(boolean changed)

layout(boolean changed, boolean allChildren)


 类似资料:
  • 问题内容: 我想从基于linux的系统上运行的C应用程序中获得系统正常运行时间。我不想调用uptime(1)并解析输出,我想调用我怀疑存在的基础C API。任何人都知道是否有这样的电话,或者uptime(1)只是处理从wtmp获得的记录吗? 问题答案: 您要查找的系统调用是sysinfo()。 它在sys / sysinfo.h中定义 它的签名是:int sysinfo(struct sysinf

  • 问题内容: 我认为这个问题已经存在,但是我找不到。 我不明白,为什么必须要有一个功能接口才能使用lambda。考虑以下示例: 这可以正常工作,但是如果您取消注释行,则不会。为什么?以我的理解,编译器应该能够区分这两种方法,因为它们具有不同的输入参数。为什么我需要一个功能接口并炸毁我的代码? 编辑:链接的重复项没有回答我的问题,因为我在询问不同的方法参数。但是在这里,我得到了一些非常有用的答案,这要

  • 我试图让VSCode启动并使用TypeScript运行,但收效甚微。 我正在看以下内容: https://code.visualstudio.com/docs/languages/typescript 看起来,一旦安装了编译器VSCode,就应该可以正常工作,但考虑到以下情况: tsconfig.json 包裹json tasks.json 项目 你好世界ts 从终端运行构建任务或tsc会正确指示

  • 问题内容: 我可以将数据发送到服务器,但是只有在使用FromBody-Attribute时才可以。 为什么无法使用Post从主体自动读取json数据? 后端Web API 前端angularjs 问题答案: 仅因为某事是POST请求,所以没有明确的规则如何传递参数。POST请求仍可以包含URL中编码的查询参数。方法参数应该是“简单”类型(字符串,整数等)的查询参数。 通常,复杂类型应该是POST表

  • 我的问题是,我的活动中的按钮需要单击两次,以使代码执行用onClick方法编写的代码。当我共享我的活动代码和布局文件代码时。请引导我解决这个问题。 活动(片段) 布局文件 而此片段正在另一个主要活动中初始化。

  • 问题内容: 如果我尝试连接组件而不直接导出,它将无法连接。 例: 为什么这会有什么不同? 问题答案: 对原始组件没有任何作用,而是由高阶组件模式实现的:因此它以React组件为参数,并通过执行需要执行的操作返回另一个组件,例如提供动作创建者和国家作为道具。 因此,当您返回分派返回的组件时,实际上会返回正确的组件。您传递给的组件没有可用的组件。 因此,您可以想到将connect编写为类似