java - 在 java JFace 对话框中禁用关闭按钮?

标签 java user-interface swt jface

如何在 java JFace 对话框中禁用关闭按钮(或尽可能使其完全消失)?

最佳答案

对话框中的按钮是使用方法 createButton() 创建的。要“过滤掉”取消按钮,您可以按如下方式覆盖它:

protected Button createButton(Composite parent, int id,
        String label, boolean defaultButton) {
    if (id == IDialogConstants.CANCEL_ID) return null;
    return super.createButton(parent, id, label, defaultButton);
}

但是,Dialog 的关闭按钮(由操作系统提供)仍然有效。要禁用它,您可以覆盖 canHandleShellCloseEvent():

protected boolean canHandleShellCloseEvent() {
    return false;
}

这是一个完整的最小示例:

package stackoverflow;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class JFaceDialogNoCloseButton {
    private static final Display DISPLAY = Display.getDefault();

    public static void main(String[] args) {
        Shell shell = new Shell(DISPLAY, SWT.CLOSE | SWT.RESIZE);
        shell.setSize(200, 100);
        shell.setLayout(new FillLayout());

        final Dialog dialog = new InputDialog(shell, "Title", "Message",
                "initial value", null) {
            @Override
            protected Button createButton(Composite parent, int id,
                    String label, boolean defaultButton) {
                if (id == IDialogConstants.CANCEL_ID)
                    return null;
                return super.createButton(parent, id, label, defaultButton);
            }

            @Override
            protected boolean canHandleShellCloseEvent() {
                return false;
            }
        };

        Button button = new Button(shell, SWT.PUSH);
        button.setText("Launch JFace Dialog");
        button.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                dialog.open();
            }
        });

        shell.open();

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

关于java - 在 java JFace 对话框中禁用关闭按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4080925/

相关文章:

java - 从服务线程更新 JavaFX GUI

java - 通过 Stream 过滤操作并维护为 map 而不是 Stream

java - 使用 double 时限制 Java 中的十进制数字

java - JPanel 转换,我的代码有什么问题?

java - 树不占据整个父组合

java - 如何使用 IContentAssist 处理器在自动完成中显示弹出的附加信息

java - Android:如何从服务器日期开始构建

java - 为什么我的 JFrame 不显示我的标签

git - 用于 Linux 的漂亮且功能丰富的 Git GUI

java - 发生 mouseDoubleClick 时停止 mouseDown 事件