SWT 检查 shell 是否超出屏幕边界

SWT check if shell exceeds screen bounds

我有一个按钮可以在我的应用程序中打开一个 shell,它显示了一些复选框,底部还有 2 个按钮。问题是它可能会因为高度太大而被切断。

我想要的解决方案是将 shell 的内容添加到 ScrollableComposite,这不起作用,因为 shell 只是在高度上扩展,所以组合的滚动条不会做任何事情。

我认为最好的方法是计算 shell 是否超出屏幕边界,但我不明白它的坐标是如何工作的。 shell 的父级是 shell,因此 Shell::getBounds() 应该 return 坐标 相对于显示器 ,但我在这种情况下,我想我需要 shell 相对于监视器 的边界 (我可以通过 Shell::getMonitor())。

我该怎么做?

只需根据显示器大小而不是边界设置 shell 大小。

这是 Eclipse 启动配置对话框用来确保它不会太大的内容:

protected void setShellSize(int width, int height) {
    Rectangle bounds = getShell().getMonitor().getBounds();
    getShell().setSize(Math.min(width, bounds.width), Math.min(height, bounds.height));
}