idea-插件开发 Dialogs


前言

Dialogs (对话框), 在图形用户界面中,对话框(又称对话方块[1])是一种特殊的视窗, 用来在用户界面中向用户显示信息,或者在需要的时候获得用户的输入响应。之所以称之为“对话框”是因为它们使计算机和用户之间构成了一个对话——或者是通知用户一些信息,或者是请求用户的输入,或者两者皆有。

在这里插入图片描述


一、DialogWrapper

DialogWrapper是一个基类,应该用于IntelliJ平台中显示的所有模式对话框(以及一些非模式对话框)。

它提供以下功能

  • 按钮布局(确定/取消按钮的平台特定顺序,macOS特定的帮助按钮)
  • 非模式验证(当输入到对话框的数据无效时显示错误消息文本)
  • 快捷键支持 (esc (退出), Left/Right(按钮切换), Y/N (如果对话框中存在是/否操作,则为Y/N))
  • 可选“不再询问”复选框

DialogWrapper类通常与GUI设计器窗体一起使用。在本例中,将GUI设计器窗体绑定到类扩展DialogWrapper,将窗体的顶层面板绑定到一个字段,然后从createCenterPanel()方法返回该字段。

要显示对话框,请调用show()方法,然后使用getExitCode()方法检查对话框是如何关闭的。showAndGet()方法可用于组合这两个调用。

扩展功能

  • 要自定义对话框中显示的按钮(替换标准的“确定”/“取消”/“帮助”按钮),需要重写createActions()或createLeftActions()方法。这两个方法都返回一个Swing动作对象数组。如果某个按钮关闭了对话框,请使用DialogWrapperExitAction作为操作的基类。使用动作.putValue(DialogWrapper.DEFAULT_ACTION,true)设置默认按钮。
  • 要验证输入到对话框中的数据,请重写doValidate()方法。计时器将自动调用该方法。如果当前输入的数据有效,则返回null。否则,返回封装错误消息的ValidationInfo对象和与无效数据关联的可选组件。当指定一个组件时,一个错误图标将显示在它旁边,当用户试图调用OK操作时,它将被聚焦。

二、使用 DialogWrapper

1. 简单小案例

代码如下(示例):

1.1 定义dialog

public class SampleDialogWrapper extends DialogWrapper {

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


    /**
     * 自定义提示组件
     *
     * @return JComponent
     */
    @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;
    }
}

1.2 使用dialog

if (new SampleDialogWrapper().showAndGet()) {
    // user pressed OK
  }

2. 默认 dialog

也可以使用idea默认的dialog,简单方便,主要是不用自己写!只要不是自己写的就怎么都是香的 ~ . ~

2.1 com.intellij.openapi.ui.Messages

这是 JetBrains 提供的工具类,官方介绍如下
Provides several default notification dialogs (“OK|Cancel”) as well as simple input dialogs.(提供几个默认的通知对话框(“确定|取消”)以及简单的输入对话框。)

下面是这个类一些简单的方法 — 看看方法名就大概知道啥功能
在这里插入图片描述

代码如下(示例):

类似文本域输入框

	   // 方法参数如下 
	   public static @NlsSafe String showMultilineInputDialog(Project project,
                                                @DialogMessage String message,
                                                @DialogTitle String title,
                                                @Nullable @NonNls String initialValue,
                                                @Nullable Icon icon,
                                                @Nullable InputValidator validator)


		// 调用方法如下
		// userInput
        String strMysqlColumns = Messages.showMultilineInputDialog(project, "Enter the column you need to add salt",
                "xyang", "example:\n" +
                        "\t user_id,\n " +
                        "\t user_name", Messages.getInformationIcon(), null);

实际效果
在这里插入图片描述

可能有小伙伴可能会疑惑,Project 这个参数…不明白的建议看看我前俩篇文章

单行输入框


// 方法如下
public static @NlsSafe String showInputDialog(@Nullable Project project,
                                       @DialogMessage String message,
                                       @DialogTitle String title,
                                       @Nullable Icon icon)


// 调用逻辑如下
String prefix = Messages.showInputDialog(project, "Enter the prefix you need to add",
                "xyang", Messages.getInformationIcon());

实际效果如下
在这里插入图片描述


总结

还有很多各种各样的 dialogs,这里就不一一演示了,很多方法看方法名都大概能知道意思

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值