Java对话框-查看是否单击了OK?
我有一个用于客户端GUI的对话框,该对话框要求提供要连接的服务器的IP和端口。我有其他的一切,但我如何使它,当用户点击“确定”在我的对话框,它运行的东西?以下是我目前掌握的情况:Java对话框-查看是否单击了OK?,java,swing,user-interface,jdialog,joptionpane,Java,Swing,User Interface,Jdialog,Joptionpane,我有一个用于客户端GUI的对话框,该对话框要求提供要连接的服务器的IP和端口。我有其他的一切,但我如何使它,当用户点击“确定”在我的对话框,它运行的东西?以下是我目前掌握的情况: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JDialog; import javax.swing.JOptionPane; import javax.swing.JTextFi
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..
请理解JOptionPane中的第二个参数,对象参数,可以是任何Swing组件,包括包含简单或复杂GUI的JPanel 考虑创建一个JPanel,在其中放置一些组件,包括JLabel和两个JTextFields,一个用于IP,一个用于port,然后在JOptionPane中显示此JPanel。然后,您可以轻松检查是否已按下OK并相应地执行操作
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());
}
}
}
我建议创建一个
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
的布局,就像设计其他类型的框架一样。很好的解决方案。
如果您不想使用其他内容,这是一个有效的示例:
1) 将“不执行任何操作”设置为“关闭”,以确保用户必须按“确定”
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){}
如果要实现非模式对话框,这可能是一个解决方案。为什么要从JOptionPane对象创建JDialog,而不仅仅是显示JOptionPane?我想,您需要一个模态对话框,因此JOptionPane本身应该可以正常工作。