我有一个客户端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”时,我可以运行一些代码。谢谢!
答案 0 :(得分:10)
我建议使用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..
答案 1 :(得分:6)
我建议创建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
的布局,就像设置任何其他类型的框架一样。
答案 2 :(得分:5)
请理解,JOptionPane中的第二个参数,即object参数,可以是任何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());
}
}
}
答案 3 :(得分:0)
好的解决方案。 如果你不想使用别的东西,这是一个有效的例子: 1)设置DO_NOTHING_ON_CLOSE以确保用户必须按OK 2)验证JDialog是否仍然可见。
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){}
如果您想要实现非模态对话框,这可以是一个解决方案。