【问题标题】:SWT creating an on-top message dialogSWT 创建顶部消息对话框
【发布时间】:2017-12-14 11:40:07
【问题描述】:

我想创建一个 SWT MessageDialog,例如,一个问题,它位于所有窗口之上,至少最初是这样。

我的第一个想法是通过Shell。我看到可以创建一个Shell 风格为ON_TOP。但是使用MessageDialog 方法,我可以设置一个父shell。如何为MessageDialog 打开的窗口设置该样式?

【问题讨论】:

  • 问题正文包括“AWT”,它也被标记为awt,但MessageDialogShell API 都是swt 的一部分。它是哪一个?解决后请edit问题。
  • 您是否尝试过创建一个shell并将其设置为对话框父shell?
  • @tkotisis。我做到了。结果是 Linux 和 Windows 之间的差异。特别是,它在 Linux 上打开了一个空白窗口,除了问题窗口。
  • 模态对话框是否满足您的需求?如果是,请参阅:*.com/questions/4370452/…

标签: java swt


【解决方案1】:

你需要继承Dialog类并调用setShellStyle(int newShellStyle)方法:

public class OnTopDialog extends MessageDialog {

    public OnTopDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, int dialogImageType, int defaultIndex, String[] dialogButtonLabels) {
        super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, defaultIndex, dialogButtonLabels);
        setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.ON_TOP);
    }

}

【讨论】:

  • 不幸的是,这不起作用,因为 MessageDialog 的 open() 方法创建了一个新的 MessageDialog 对象来操作它,因此不使用新的构造函数。此外,open() 消除了所有 shell 样式,但它的 JavaDoc 中提到了这两种样式。所以,你必须重新实现一切
  • open() 方法不会创建新对话框。您指的是静态 open(...) 方法。不知道为什么需要使用它。
  • 即便如此,如果您需要类似的便捷方法,您只需要重新实现 open(...) 方法即可。