如何从关闭OK选项中停止Java Swing JOptionPane OK_CANCEL_OPTION?

时间:2015-09-30 21:59:06

标签: java swing user-interface jpanel joptionpane

我正在使用JOptionPane OK_CANCEL_OPTION提交数据,并且(现在)将其打印出来。但是,我希望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");
   }
}
}

谢谢!!!

2 个答案:

答案 0 :(得分:2)

  

有没有办法让GUI保持打开以进行多次提交?

查看Stopping Automatic Dialog Closing上Swing教程中有关解决方案的部分。

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

如果您使用此方法,那么您可能还需要查看Customizing Button Text上的部分,以便您按下“OK”以外的其他内容。所以也许你有“提交”,“提交和关闭”,“取消”等按钮。

答案 1 :(得分:1)

如果第一个输入没有改变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.");
}