Java对话框 – 查看是否单击了确定?

我有一个客户端GUI的对话框,询问要连接的服务器的IP和端口。 我还有其他所有内容,但是如何在用户点击对话框中的“确定”时进行操作呢? 这是我到目前为止所拥有的:

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 

我知道代码不正确,但我想要的是当用户在对话框上点击“OK”时,我可以运行一些代码。 谢谢!

我建议改用showConfirmDialog

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

在那里你可以测试JDialog/JOptionPane各种返回值

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

我建议创建一个JPanel并使用JOptionpane.showConfirmDialog() (甚至是JOptionPane.showOptionDialog()来显示对话框并检索选项。以下是对代码的修改示例:

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

该死的,花了太长时间才发布。 无论如何,只需设计JPanel的布局就像任何其他类型的框架一样。

请理解,JOptionPane中的第二个参数(对象参数)可以是任何Swing组件,包括一个包含简单或复杂GUI的JPanel。

考虑创建一个JPanel,在其中放置一些组件,包括JLabel和两个JTextField,一个用于IP,一个用于端口,然后在JOptionPane中显示此JPanel。 然后,您可以轻松检查是否已按下确定并采取相应措施。

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

好的解决方案 如果你不想使用别的东西,这是一个工作的例子:1)设置DO_NOTHING_ON_CLOSE以确保用户必须按OK 2)validationJDialog是否仍然可见。

 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){} 

如果要实现非modal dialog,这可以是一种解决方案。