对话框
对话框
对话框包装器
DialogWrapper 是在IntelliJ Platform上所有对话框的基础类,设计对话框时,需要继承这个类:
它提供了下面的功能:
- 按钮布局
- 帮助
- 对话框的size
- 数据验证(输入错误数据的时候,显示异常信息)
- 快捷键
- ESC关键对话框
- Left/Right切换按钮
- 如果在对话框中存在Y/N,他们代表yes/no
- 可选框 是否再次询问(Do not ask again)
使用
当使用 DialogWrapper 时,需要下面几步:
调用 DialogWrapper的构造方法,传入Project,也可以传入对话框的父组件
setTitle()方法设置对话框的标题
init()方法:在对话框类的构造器上调用init()方法
实现 createCenterPanel() 方法,返回该对话框主要内容的组件
可选项
重写getPreferredFocusedComponent() 方法,返回对话框第一次打开的时候获得焦点的组件
重写getDimensionServiceKey() 方法,返回持久化对话框时的身份id
getHelpId()方法:返回对话框的帮助内容(详情查询文档)
DialogWrapper 经常和GUI表单设计一起使用。GUI 设计器表单绑定到DialogWrapper的实现类上,把类的成员属性和面板绑定到一起,通过 createCenterPanel() 方法返回该字段。当使用 Kotlin的时候,使用Kotlin UI DSL 提供对话框的内容
调用DialogWrapper的 show() 方法显示对话框,然后调用 getExitCode() 可以检查对话框是否被关闭(相关code: DialogWrapper#OK_EXIT_CODE|CANCEL_EXIT_CODE|CLOSE_EXIT_CODE), **showAndGet()**方法合并了这2个操作
重写createActions()或createLeftActions() 方法,可以自定义对话框中的按钮(比如替换 OK/Cancel/Help这类按钮),这2个方法会返回 Swing Action的数组,
使用 DialogWrapperExitAction 绑定到按钮可以关闭对话框
action.putValue(DialogWrapper.DEFAULT_ACTION, true) 可以设置默认的按钮
输入验证
可以在 Validation errors 查看验证器的实现逻辑
重写 doValidate()可以验证对话框中输入的内容,定时器会定时调用该方法,如果当前输入是合法的,返回null。否则,返回一个带错误消息和交联组件的ValidationInfo对象。一个错误图标会显示在这个返回的关联组件上,当用户点击确认按钮时,这个组件会获得焦点,要求用户进行修改。
示例
DialogWrapper 实现类示例
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
}
});