Java Swing How to - Get value from dialog without closing it








Question

We would like to know how to get value from dialog without closing it.

Answer

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
/*w w  w.  j a  va 2  s  . c  o m*/
public class Main extends Box {
  JFrame frame;
  JTextArea text = new JTextArea("this is a test");

  public Main(JFrame frame) {
    super(BoxLayout.Y_AXIS);
    this.frame = frame;
    add(text);
    JButton button = new JButton("Click Me");
    button.addActionListener(e -> launchDialog());
    add(button);
  }

  public void launchDialog() {
    JButton findButton = new JButton("Find");
    findButton.addActionListener(e -> {
      int start = text.getText().indexOf("is");
      int end = start + "is".length();
      if (start != -1) {
        text.requestFocus();
        text.select(start, end);
      }
    });
    JButton cancelButton = new JButton("Cancel");

    JOptionPane optionPane = new JOptionPane("Do you understand?", JOptionPane.QUESTION_MESSAGE,
        JOptionPane.YES_NO_OPTION, null, new Object[] { findButton,
            cancelButton });

    JDialog dialog = new JDialog(frame, "Click a button", false);
    cancelButton.addActionListener(e -> dialog.setVisible(false));
    dialog.setContentPane(optionPane);
    dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    dialog.setLocation(100, 100);
    dialog.pack();
    dialog.setVisible(true);
  }
  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(new Main(frame));
    frame.pack();
    frame.setVisible(true);
  }
}