如何阻止Java Swing JOptionPane OK\u CANCEL\u选项关闭OK选项?

如何阻止Java Swing JOptionPane OK\u CANCEL\u选项关闭OK选项?,java,swing,user-interface,jpanel,joptionpane,Java,Swing,User Interface,Jpanel,Joptionpane,我正在使用JOptionPane OK\u CANCEL\u选项提交数据并(目前)打印出来。但是,我希望GUI保持开放,并允许多次提交。但是,现在GUI在单击“OK”选项后关闭,我必须重新运行程序以提交不同的数据。有没有办法让GUI对多个提交保持打开状态 import java.awt.GridLayout; import javax.swing.*; import java.util.Calendar; import java.text.DateFormat; import java.tex

我正在使用JOptionPane OK\u CANCEL\u选项提交数据并(目前)打印出来。但是,我希望GUI保持开放,并允许多次提交。但是,现在GUI在单击“OK”选项后关闭,我必须重新运行程序以提交不同的数据。有没有办法让GUI对多个提交保持打开状态

import java.awt.GridLayout; 
import javax.swing.*;
import java.util.Calendar;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

class Display {

    public static void main(String[] args) {
    JTextField symbol = new JTextField();
    JTextField contractEx = new JTextField();
    JTextField lots = new JTextField();
    JTextField price = new JTextField();
    String[] items = {"Buy", "Sell"};
    JComboBox<String> combo = new JComboBox<String>(items);
    JTextField trader = new JTextField();
    JPanel panel = new JPanel(new GridLayout(0, 1));
    panel.add(new JLabel("Symbol (e.g. HH):"));
    panel.add(symbol);
    panel.add(new JLabel("Contract Expiry (e.g. JUL 16):"));
    panel.add(contractEx);
    panel.add(new JLabel("Lots:"));
    panel.add(lots);
    panel.add(new JLabel("Price:"));
    panel.add(price);
    panel.add(combo);
    panel.add(new JLabel("Trader"));
    panel.add(trader);

    int result = JOptionPane.showConfirmDialog(null, panel, "Trade Capture   System",
    JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
    if (result == JOptionPane.OK_OPTION) {
        if(symbol.getText().equals("") || contractEx.getText().equals("") || lots.getText().equals("") || price.getText().equals("") || trader.getText().equals("")){
            JOptionPane.showMessageDialog(panel, "Please enter data into all fields.");
    }
    else{  
            DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            Calendar cal = Calendar.getInstance();
            System.out.println(dateFormat.format(cal.getTime())); //2014/08/06 16:00:22
            System.out.println(symbol.getText() + " "
                            + contractEx.getText() + " "
                            + lots.getText() + " "
                            + combo.getSelectedItem() + " "
                            + price.getText() + " "
                            + trader.getText());
    }
    } else {
         System.out.println("Cancelled");
   }
}
}
导入java.awt.GridLayout;
导入javax.swing.*;
导入java.util.Calendar;
导入java.text.DateFormat;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
课堂展示{
公共静态void main(字符串[]args){
JTextField symbol=新的JTextField();
JTextField contractEx=新的JTextField();
JTextField lots=新的JTextField();
JTextField price=新的JTextField();
字符串[]项={“买”、“卖”};
JComboBox组合=新的JComboBox(项目);
JTextField trader=新的JTextField();
JPanel面板=新JPanel(新网格布局(0,1));
面板。添加(新的JLabel(“符号(如HH):”);
面板。添加(符号);
添加(新的JLabel(“合同到期(如7月16日):”);
面板。添加(contractEx);
添加(新的JLabel(“批次”);
面板。添加(批次);
添加(新的JLabel(“价格:”);
面板。添加(价格);
面板。添加(组合);
新增(新JLabel(“交易商”));
增补(交易商);
int result=JOptionPane.showConfirmDialog(null,面板,“交易捕获系统”,
JOptionPane.OK_取消_选项,JOptionPane.PLAIN_消息);
if(result==JOptionPane.OK\u选项){
如果(symbol.getText().equals(“”| | contractedEx.getText().equals(“”| | lots.getText().equals(“”| | price.getText().equals(“”| | trader.getText().equals(“”)){
showMessageDialog(面板,“请在所有字段中输入数据”);
}
否则{
DateFormat DateFormat=新的简化格式(“yyyy/MM/dd HH:MM:ss”);
Calendar cal=Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime());//2014/08/06 16:00:22
System.out.println(symbol.getText()+“”
+contractEx.getText()+“”
+lots.getText()+“”
+combo.getSelectedItem()+“”
+price.getText()+“”
+trader.getText());
}
}否则{
系统输出打印项次(“取消”);
}
}
}

谢谢你

如果第一次输入没有改变JOptionPane本身中的任何内容,您可以在窗口关闭后立即重新创建窗口

if (result == JOptionPane.OK_OPTION) {
    int result = JOptionPane.showConfirmDialog(null, panel, "Trade Capture   System",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
    if(symbol.getText().equals("") || contractEx.getText().equals("") || lots.getText().equals("") || price.getText().equals("") || trader.getText().equals("")){
        JOptionPane.showMessageDialog(panel, "Please enter data into all fields.");
}
有没有办法让GUI对多个提交保持打开状态

import java.awt.GridLayout; 
import javax.swing.*;
import java.util.Calendar;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

class Display {

    public static void main(String[] args) {
    JTextField symbol = new JTextField();
    JTextField contractEx = new JTextField();
    JTextField lots = new JTextField();
    JTextField price = new JTextField();
    String[] items = {"Buy", "Sell"};
    JComboBox<String> combo = new JComboBox<String>(items);
    JTextField trader = new JTextField();
    JPanel panel = new JPanel(new GridLayout(0, 1));
    panel.add(new JLabel("Symbol (e.g. HH):"));
    panel.add(symbol);
    panel.add(new JLabel("Contract Expiry (e.g. JUL 16):"));
    panel.add(contractEx);
    panel.add(new JLabel("Lots:"));
    panel.add(lots);
    panel.add(new JLabel("Price:"));
    panel.add(price);
    panel.add(combo);
    panel.add(new JLabel("Trader"));
    panel.add(trader);

    int result = JOptionPane.showConfirmDialog(null, panel, "Trade Capture   System",
    JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
    if (result == JOptionPane.OK_OPTION) {
        if(symbol.getText().equals("") || contractEx.getText().equals("") || lots.getText().equals("") || price.getText().equals("") || trader.getText().equals("")){
            JOptionPane.showMessageDialog(panel, "Please enter data into all fields.");
    }
    else{  
            DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            Calendar cal = Calendar.getInstance();
            System.out.println(dateFormat.format(cal.getTime())); //2014/08/06 16:00:22
            System.out.println(symbol.getText() + " "
                            + contractEx.getText() + " "
                            + lots.getText() + " "
                            + combo.getSelectedItem() + " "
                            + price.getText() + " "
                            + trader.getText());
    }
    } else {
         System.out.println("Cancelled");
   }
}
}
查看上Swing教程中的部分以了解解决方案

您可以决定使用这种方法还是创建自己的自定义对话框更容易


如果您使用这种方法,那么您可能还希望查看关于
自定义按钮文本
的部分,这样您的按钮就不会说“OK”。因此,您可能有“提交”、“提交并关闭”、“取消”等按钮。

这并不是
JOptionPane
API的真正目的,它是为“简短”的、单个可操作的项目而设计的,然后就可以离开了。如果你想要更复杂的东西,那么我建议你考虑建立自己的<代码> jPoCTs/COD>并把它放在你自己的代码<代码>对话框/<代码>中,这样你就可以得到完全的控制。