SWT对话框在运行时没有标题栏

时间:2017-05-01 01:21:01

标签: java eclipse swt

我非常习惯在NetBeans中使用Swing设计器,但我想我会尝试新的东西。我在Eclipse中使用SWT设计师非常新,所以我还在学习。

我试图创建一个Dialog,它应该是ApplicationWindow的模态。 GUI设计器显示标题栏(带有窗口标题,关闭/最小化按钮等),但是当对话框在运行时打开时,标题栏已完全消失。

我错过了什么吗?我试图在JDialog之上创建等效于模态JFrame。我还没有找到任何实质性的东西。

编辑:我发现了样式SWT.DEFAULT,它使模态对话框'#34;向下滑动"在父窗口前面(我在Mac上),这肯定比没有标题栏的不可移动的单独窗口更好,但是如果有人能提供更多非常有用的信息。

1 个答案:

答案 0 :(得分:0)

我无法使用SWT Designer,因为我从未使用它,但我可以提供代码段。

我建议你看一下创建一个扩展JFace Dialog抽象类的类。

您可以使用setShellStyle(int)方法更改样式,特别是使用模式样式位,例如SWT.APPLICATION_MODALSWT.PRIMARY_MODAL。如果您希望Dialog对应用程序中的所有窗口都是模态的,请使用SWT.APPLICATION_MODAL,或者如果您希望它只是父级的模态,请使用SWT.PRIMARY_MODAL

例如:

public class ModalDialog extends Dialog {

    public ModalDialog(final Shell parentShell) {
        super(parentShell);
        // SWT.APPLICATION_MODAL or SWT.PRIMARY_MODAL depending on needs
        setShellStyle(SWT.APPLICATION_MODAL | SWT.TITLE | SWT.BORDER | SWT.CLOSE);
    }

}

您可以根据您要查找的内容添加/删除样式位(以及按钮,标题,内容等),但这样可以为您提供最小的Dialog应用程序:

enter image description here

完整示例:

public class ModalDialogTest {

    public static class ModalDialog extends Dialog {

        /**
         * @param parentShell
         */
        public ModalDialog(final Shell parentShell) {
            super(parentShell);
            setShellStyle(SWT.APPLICATION_MODAL | SWT.TITLE | SWT.BORDER | SWT.CLOSE);
        }

    }

    private final Display display;
    private final Shell shell;

    public ModalDialogTest() {
        display = new Display();
        shell = new Shell(display);
        shell.setLayout(new FillLayout());

        final ApplicationWindow applicationWindow = new ApplicationWindow(shell);
        applicationWindow.open();

        final Button button = new Button(shell, SWT.PUSH);
        button.setText("Open modal dialog");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                // Create the modal Dialog on the ApplicationWindow
                new ModalDialog(applicationWindow.getShell()).open();
            }
        });
    }

    public void run() {
        shell.setSize(200, 200);
        shell.open();

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

    public static void main(final String... args) {
        new ModalDialogTest().run();
    }

}