Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

intellij plugin development show input dialog with multiple text boxes

I'm creating intelliJ plugin and registering my action , inside my action i want to show an input dialog with multiple text boxes, how do I do that ? I have an example of showing only one text box -

 String txt= Messages.showInputDialog(project, "What is your name?", 
                                     "Input your name", Messages.getQuestionIcon());
like image 935
Bazuka Avatar asked May 22 '26 04:05

Bazuka


2 Answers

I agree with @AKT with extending the DialogWrapper but suggest overriding doOKAction:

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

      close(OK_EXIT_CODE);
    }
  }

Or, if you just want your data out without the Action mess, add a custom method:

public class SearchDialog extends DialogWrapper {

  ...

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

You can use it like:

SearchDialog dialog = new SearchDialog();
dialog.showAndGet(); // Maybe check if ok or cancel was pressed
String myQuery = dialog.getQuery();
System.out.println("my query: " + myQuery);
like image 159
rrmoelker Avatar answered May 24 '26 23:05

rrmoelker


Create a new GUI Form (form + class). Class should extend DialogWrapper and override methods.

Inside createCenterPanel() return your root JPanel. You can set any default values, add event listeners to text box, etc., before returning JPanel.

Implement an Action interface where you want to get the value when OK button is clicked. Pass this action to your form class.

getOKAction() should return this action.

Following code is from a plugin i'm currently working on. Hopefully this will give you some idea but will have to adapt it to your need.

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();
   } 

Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!