Java Dialog - Find out if OK is clicked?

19,145

Solution 1

I'd suggest to use showConfirmDialog instead

int result = JOptionPane.showConfirmDialog(myParent, "Narrative", 
       "Title", JOptionPane.INFORMATION_MESSAGE);

and there you can test for various returns value from JDialog/JOptionPane

if (result == JOptionPane.OK_OPTION, 
              JOptionPane.CANCEL_OPTION, 
              JOptionPane.CLOSED_OPTION, etc..

Solution 2

I'd suggest creating a JPanel and using JOptionpane.showConfirmDialog() (or even JOptionPane.showOptionDialog() to display the dialog and retrieve the option. Here's a modification of your code as an example:

import java.awt.*;
import javax.swing.*;

class ClientDialog {
    private JTextField ip = new JTextField(20);
    private JTextField port = new JTextField(20);
    private JOptionPane optionPane;
    private JPanel panel;

    public void CreateDialog(){

        panel = new JPanel(new GridLayout(2, 2));

        panel.add(new JLabel("IP"));
        panel.add(ip);
        panel.add(new JLabel("Port"));
        panel.add(port);

        int option = JOptionPane.showConfirmDialog(null, panel, "Client Dialog", JOptionPane.DEFAULT_OPTION);

        if (option == JOptionPane.OK_OPTION) {
            System.out.println("OK!"); // do something
        }
    }

}

public class Test {

   public static void main(String args[])
   {
      ClientDialog c = new ClientDialog();
      c.CreateDialog();
   }

}

Damn, took too long to post. Anyway just design the layout of the JPanel as you would for any other sort of frame.

Solution 3

Please understand that the 2nd parameter in a JOptionPane, the object parameter, can be any Swing component including a JPanel that holds a simple or complex GUI.

Consider creating a JPanel, placing a few components in it including JLabels and two JTextFields, one for IP, one for port, and then displaying this JPanel in a JOptionPane. Then you can easily check if OK has been pressed and act accordingly.

import javax.swing.*;

public class OptionEg {
   public static void main(String[] args) {
      final JTextField ipField = new JTextField(10);
      final JTextField portField = new JTextField(10);
      JPanel panel = new JPanel();
      panel.add(new JLabel("IP:"));
      panel.add(ipField);

      panel.add(Box.createHorizontalStrut(15));
      panel.add(new JLabel("Port:"));
      panel.add(portField);

      int result = JOptionPane.showConfirmDialog(null, panel,
            "Enter Information", JOptionPane.OK_CANCEL_OPTION);

      if (result == JOptionPane.OK_OPTION) {
         System.out.println("IP: " + ipField.getText());
         System.out.println("Port: " + portField.getText());
      }

   }
}
Share:
19,145
Admin
Author by

Admin

Updated on June 18, 2022

Comments

  • Admin
    Admin almost 2 years

    I have a dialog for a client-GUI that asks for the IP and Port of the server one wants to connect to. I have everything else, but how would I make it so that when the user clicks "OK" on my dialog box, that it runs something? Here's what I have so far:

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JDialog;
    import javax.swing.JOptionPane;
    import javax.swing.JTextField;
    
    
    public class ClientDialog {
        JTextField ip = new JTextField(20);
        JTextField port = new JTextField(20);
        GUI gui = new GUI();
        Client client = new Client();
        JOptionPane optionPane;
    
        public void CreateDialog(){
    
            Object msg[] = {"IP: ", ip, "\nPort: ", port};
    
            optionPane = new JOptionPane();
            optionPane.setMessage(msg);
            optionPane.setMessageType(JOptionPane.INFORMATION_MESSAGE);
            JDialog dialog = optionPane.createDialog(null, "Connect to a server");
            dialog.setVisible(true);
    
            if(dialog == JOptionPane.OK_OPTION){
                System.out.println(ip);
    
                String ipMsg = ip.getText();
                int portMsg = Integer.parseInt(port.getText());
    
                gui.CreateConsole(client, ipMsg, portMsg);
            }
    
        }
    
    }   //End class
    

    I know that the code isn't correct, but what I want is that when the user hits "OK" on the dialog, I can run some code. Thanks!