intellij 插件开发显示带有多个文本框的输入对话框

intellij plugin development show input dialog with multiple text boxes

我正在创建 intelliJ 插件并注册我的操作,在我的操作中我想显示一个包含多个文本框的输入对话框,我该怎么做? 我有一个只显示一个文本框的例子 -

 String txt= Messages.showInputDialog(project, "What is your name?", 
                                     "Input your name", Messages.getQuestionIcon());

创建一个新的 GUI 窗体(窗体 + class)。 Class 应该扩展 DialogWrapper 并覆盖方法。

createCenterPanel() return 您的根 JPanel 中。在 returning JPanel 之前,您可以设置任何默认值、向文本框添加事件侦听器等。

实现一个 Action 界面,您希望在单击“确定”按钮时获取该界面的值。将此操作传递给您的表单 class.

getOKAction() 应该 return 这个动作。

以下代码来自我目前正在开发的插件。希望这会给您一些想法,但必须根据您的需要进行调整。

public class ReleaseNoteDialog extends DialogWrapper implements Action {
    private JTextArea txtReleaseNote;
    private JPanel panelWrapper;

    .......
    protected JComponent createCenterPanel() {
        ......
        return panelWrapper;
    }
    ......
    @Override
    protected Action getOKAction() {
         return this;
    }
    .......
   @Override
   public void actionPerformed(ActionEvent e) {
        // save value to project state
        super.doOKAction();
   } 

我同意@AKT 扩展 DialogWrapper 但建议覆盖 doOKAction:

@Override
  protected void doOKAction() {
    if (getOKAction().isEnabled()) {
      // custom logic
      System.out.println("custom ok action logic");

      close(OK_EXIT_CODE);
    }
  }

或者,如果您只想在不使用 Action 的情况下输出数据,请添加自定义方法:

public class SearchDialog extends DialogWrapper {

  ...

  public String getQuery() {
    return "my custom query";
  }
}

您可以像这样使用它:

SearchDialog dialog = new SearchDialog();
dialog.showAndGet(); // Maybe check if ok or cancel was pressed
String myQuery = dialog.getQuery();
System.out.println("my query: " + myQuery);