Java dialog - find out if the OK button is pressed?

I have a dialog for the client GUI that asks for the IP address and port of the server you want to connect to. I have everything else, but how can I make it so that when the user clicks β€œOK” in my dialog box, that he starts something? Here is what I still have:

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 is incorrect, but I want that when the user types β€œOK” in the dialog box, I can run some code. Thanks!

+4
source share
4 answers

I would suggest using showConfirmDialog instead

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

and there you can check for different return values ​​from JDialog/JOptionPane

 if (result == JOptionPane.OK_OPTION, JOptionPane.CANCEL_OPTION, JOptionPane.CLOSED_OPTION, etc.. 
+10
source

I would suggest creating a JPanel and using JOptionpane.showConfirmDialog() (or even JOptionPane.showOptionDialog() to display a dialog box and get an option). Here you can change the code:

 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, too long to write. In any case, just create a JPanel layout, as with any other frame.

+6
source

Please understand that the second parameter in JOptionPane, the parameter of the object, can be any Swing component, including a JPanel that contains a simple or complex graphical interface.

Consider creating a JPanel by placing several components in it, including JLabels and two JTextFields, one for IP, one for the port, and then mapping that JPanel to 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()); } } } 
+5
source

Good decisions. If you want not to use something else, this is a working example: 1) set DO_NOTHING_ON_CLOSE so that the user MUST click OK. 2) check if JDialog is all visible.

 dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); dialog.setModal(false); dialog.setVisible(true); dialog.setAlwaysOnTop(true); while(dialog.isVisible())try{Thread.sleep(50);} catch(InterruptedException e){} 

This may be the solution if you want to implement a modeless dialog box.

0
source

Source: https://habr.com/ru/post/1387276/


All Articles