SWT Shell 根据子项调整大小

2024-01-03

我正在研究这个Composite画布上还有其他Composite可以添加和删除。

我对整个布局概念的理解仍然很模糊。

当孩子被添加到容器中时,考虑到容器有一个GridData它填充了父级,父级不应该也知道子级调整了大小吗?由于外壳(顶部父级)的原因,子级在放置其容器后仍保持隐藏状态。

如果问题太模糊,请随时询问更多细节。另外,请尽量不要指给我了解 SWT 中的布局文章。

/**
 * 
 * @author ggrec
 *
 */
public class SSCCE
{

    // ==================== 2. Instance Fields ============================

    private Composite componentContainer;

    private int componentCount = 0;

    // ==================== 3. Static Methods =============================

    public static void main(final String[] args)
    {
        new SSCCE();
    }

    // ==================== 4. Constructors ===============================

    private SSCCE()
    {
        final Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setLayout(new GridLayout(1, false));

        createContents(shell);

        shell.pack();
        shell.open();
        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

    // ==================== 5. Creators ===================================

    private void createContents(final Composite parent)
    {
        parent.setLayout(new GridLayout());
        parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        final Button button = new Button(parent, SWT.PUSH);
        button.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        button.setText("Add New Component");

        button.addSelectionListener(new SelectionAdapter()
        {
            @Override public void widgetSelected(final SelectionEvent e)
            {
                addNewComponent();

                componentContainer.layout();
            }
        });

        componentContainer = new Composite(parent, SWT.BORDER);
        componentContainer.setLayout(new GridLayout());
        componentContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    }

    // ==================== 6. Action Methods =============================

    private void addNewComponent()
    {
        final Composite component = new Composite(componentContainer, SWT.BORDER);
        component.setLayout(new FillLayout());
        component.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        final Label label = new Label(component, SWT.NONE);
        label.setText( String.valueOf(componentCount++) );
    }
}

Fun fact: 这个问题是 veeery 相关的9 分钟前发布的另一篇文章 https://stackoverflow.com/questions/20204367/how-to-dynamically-add-swt-widgets-to-a-composite。有人要么是通灵的,要么是在跟踪我。


为了得到Shell要调整大小,您需要布局所有内容并重新计算其大小:

shell.layout(true, true);

final Point newSize = shell.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);  

shell.setSize(newSize);

你也许可以通过打电话逃脱layout()在一个孩子身上Compositeshell 的内容取决于发生的变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SWT Shell 根据子项调整大小 的相关文章

随机推荐

  • 未找到符号,应位于:平面命名空间

    我有一个巨大的gl pxd包含所有定义的文件gl h glu h and glut h 例如它有这些行 cdef extern from
  • 为什么 cffi 比 numpy 快这么多?

    我一直在尝试用 python 编写 cffi 模块 它们的速度让我想知道我是否正确使用了标准 python 这让我想彻底转向C 说实话 有一些很棒的 python 库我永远无法用 C 重新实现自己 所以这比任何实际情况都更假设 此示例显示了
  • 如何保持 PHP“查看源代码”html 输出干净[重复]

    这个问题在这里已经有答案了 今天在网站上查看源代码后 这一直困扰着我 我在模板中使用 PHP 输出来获取动态内容 模板仅以 html 形式开始 并且缩进和格式清晰 然后添加 PHP 内容并缩进以匹配 html 格式 ul li nav1 l
  • 如何在我的 iPhone 应用程序中使用 NSError?

    我正在努力捕获应用程序中的错误 并且正在考虑使用NSError 我对如何使用它以及如何填充它有点困惑 有人可以提供一个关于我如何填充然后使用的示例吗NSError 嗯 我通常做的是让我的方法在运行时可能会出错 并引用NSError指针 如果
  • 从 http://localhost/ 运行 file://

    我想知道如何使我的 html 项目不从 file 运行 而是作为本地主机运行 因为我实现的功能之一需要 getUserMedia 当从 file 加载时 浏览器会立即阻止该项目 我对此做了很多研究 但我仍然不明白应该如何做 所以如果可以的话
  • 如何加密cookie中的会话id?

    当我阅读有关会话劫持的文章时 我了解到对存储在 cookie 中的会话 ID 值进行加密会很好 据我所知 当我通过调用开始会话时session start PHP 不会加密 cookie 中的会话 id 值 如何加密会话 ID 值 然后用它
  • 添加和删​​除类不同的元素

    所以我目前正在学习 jquery 和一点动画的 tweenlite 我想保持基本 所以我目前正在构建一个投资组合网格 但我想添加一个元素的点击 另一个元素正在淡入 从右侧滑动并不重要 但是我找不到一种方法来使其工作 即 1 个元素有 1 个
  • 设置使用 anaconda 与 VS Code 和集成 Git 终端时卡住

    我想学习数据科学 所以使用了一些非常流行的 Python 模块 如 Pandas Matplotlib Numpy 等 所以我清理安装了 Anaconda 现在使用它作为我的默认 Python 解释器 还使用 Conda 来安装包和创建虚拟
  • Httpclient multipart/form-data 同时发布图像和 json

    我正在尝试使用 C 代码在一个请求中上传图像和 json 但服务器总是返回 400 错误请求 使用 fiddler 执行相同的请求返回状态代码 200 帮助 这是我的小提琴手代码 WebKitFormBoundary7MA4YWxkTrZu
  • OkHTTP Websocket:连接上的蒸汽意外终止

    我正在尝试连接到 Stack Exchange 聊天 Websocket websocket 用于接收聊天中的新事件 例如新消息 以下是用于创建 Websocket 的代码 String wsUrl getWsUrl Request wsR
  • 重用字符串流而不需要重新分配

    我试图弄清楚如何重用 stringstream 对象 而无需每次在流中放入某些内容时都需要重新分配底层字符串 我已经发现这个答案 https stackoverflow com questions 624260 how to reuse a
  • JNI-多线程

    我有一个从 C 调用的 Java 函数的 JNI 包装器 我试图从不同的线程调用一些方法 但在尝试获取 JNIEnv 指针的新副本时出现错误 代码我 m 使用如下并在每个方法中调用 JNIEnv GetJniEnvHandle Thread
  • 为什么 WAMP 中的 Apache 2.1.7 不将 PHP 错误记录到 PHP 错误日志中?

    我已经安装了WAMP 并决定在最新版本的WAMP中使用默认的Apache 2 1 7 原因是我的网站所在的主机服务器也使用 2 1 7 之前 我在 WAMP 中使用 Apache 2 2 11 因为我的上一个主机也使用该版本 我现在遇到的问
  • 使用 golang 打印可读变量

    如何以可读的方式打印地图 结构或其他内容 使用 PHP 您可以做到这一点 echo pre print r var echo pre or header content type text plain print r var 使用Gofmt
  • 如何从不同文件夹中的另一个.py调用def

    我有以下结构 utils dir 有generator py 文件 其中有3 个def 我在 inline dir 中有 test py 我正在尝试在 test py 中使用生成器 py 中的 defs inline dir 和 utils
  • 方法产量如何运作?

    在javadoc中有说yield方法 导致当前正在执行的线程对象暂时暂停并允许其他线程执行 凯瑟琳 塞拉 Katherine Sierra 和伯特 贝茨 Bert Bates SCJP 书中说 Yield 应该做的是 使当前正在运行的线程头
  • 标准形式 matplotlib -- 将 e 更改为 \times 10

    在 matplotlib 中 轴有时以标准形式显示 数字由刻度显示 类似 1e 7 的内容由轴显示 有没有办法将其更改为写出的 times 10 7 我不想更改每个刻度上的标签 我希望更改出现在轴底部的 1e 7 文本 最简单的答案 使用乳
  • 如何验证或验证 JWT 签名?

    我正在尝试在 Java 中验证 JWT 令牌 如何验证或验证 JWT 令牌的 JWT 签名 您可以使用 Spring Security 中的 JWT 库 网址为https github com spring projects spring
  • Android 短信发送状态

    我需要在我的 Android 应用程序中实现一个功能来发送短信 我找到了许多与此相关的教程 但无法获得交付状态 失败或正常 以下是我的短信方法 private void sendSmsMessageWithStatus String pho
  • SWT Shell 根据子项调整大小

    我正在研究这个Composite画布上还有其他Composite可以添加和删除 我对整个布局概念的理解仍然很模糊 当孩子被添加到容器中时 考虑到容器有一个GridData它填充了父级 父级不应该也知道子级调整了大小吗 由于外壳 顶部父级 的