对话框

走着路睡觉大约 3 分钟

对话框

对话框包装器

DialogWrapperopen in new window 是在IntelliJ Platform上所有对话框的基础类,设计对话框时,需要继承这个类:

它提供了下面的功能:

  • 按钮布局
  • 帮助
  • 对话框的size
  • 数据验证(输入错误数据的时候,显示异常信息)
  • 快捷键
    • ESC关键对话框
    • Left/Right切换按钮
    • 如果在对话框中存在Y/N,他们代表yes/no
  • 可选框 是否再次询问(Do not ask again)

使用

当使用 DialogWrapperopen in new window 时,需要下面几步:

  • 调用 DialogWrapper的构造方法,传入Project,也可以传入对话框的父组件

  • setTitle()方法设置对话框的标题

  • init()方法:在对话框类的构造器上调用init()方法

  • 实现 createCenterPanel() 方法,返回该对话框主要内容的组件

可选项

  • 重写getPreferredFocusedComponent() 方法,返回对话框第一次打开的时候获得焦点的组件

  • 重写getDimensionServiceKey() 方法,返回持久化对话框时的身份id

  • getHelpId()方法:返回对话框的帮助内容(详情查询文档

DialogWrapper 经常和GUI表单设计一起使用。GUI 设计器表单绑定到DialogWrapper的实现类上,把类的成员属性和面板绑定到一起,通过 createCenterPanel() 方法返回该字段。当使用 Kotlin的时候,使用Kotlin UI DSL 提供对话框的内容

提示

设计布局可以查看参考文档open in new window

使用UI检查器open in new window 可以在运行时查看布局用到的UI组件

调用DialogWrapper的 show() 方法显示对话框,然后调用 getExitCode() 可以检查对话框是否被关闭(相关code: DialogWrapper#OK_EXIT_CODE|CANCEL_EXIT_CODE|CLOSE_EXIT_CODE), **showAndGet()**方法合并了这2个操作

重写createActions()createLeftActions() 方法,可以自定义对话框中的按钮(比如替换 OK/Cancel/Help这类按钮),这2个方法会返回 Swing Action的数组,
使用 DialogWrapperExitActionopen in new window 绑定到按钮可以关闭对话框
action.putValue(DialogWrapper.DEFAULT_ACTION, true) 可以设置默认的按钮

输入验证

可以在 Validation errorsopen in new window 查看验证器的实现逻辑

重写 doValidate()可以验证对话框中输入的内容,定时器会定时调用该方法,如果当前输入是合法的,返回null。否则,返回一个带错误消息和交联组件的ValidationInfo对象。一个错误图标会显示在这个返回的关联组件上,当用户点击确认按钮时,这个组件会获得焦点,要求用户进行修改。

示例

DialogWrapperopen in new window 实现类示例

public class SampleDialogWrapper extends DialogWrapper {

    public SampleDialogWrapper() {
        super(true); // use current window as parent
        setTitle("Test DialogWrapper");
        init();
    }

    @Nullable
    @Override
    protected JComponent createCenterPanel() {
        JPanel dialogPanel = new JPanel(new BorderLayout());

        JLabel label = new JLabel("testing");
        label.setPreferredSize(new Dimension(100, 100));
        dialogPanel.add(label, BorderLayout.CENTER);

        return dialogPanel;
    }
}

用户点击一个按钮,显示 SampleDialogWrapper 对话框:

JButton testButton = new JButton();
testButton.addActionListener(actionEvent -> {
  if (new SampleDialogWrapper().showAndGet()) {
    // user pressed OK
  }
});
上次编辑于:
贡献者: zhaojingbo
Loading...