如何阻止Java Swing JOptionPane OK\u CANCEL\u选项关闭OK选项?
我正在使用JOptionPane OK\u CANCEL\u选项提交数据并(目前)打印出来。但是,我希望GUI保持开放,并允许多次提交。但是,现在GUI在单击“OK”选项后关闭,我必须重新运行程序以提交不同的数据。有没有办法让GUI对多个提交保持打开状态如何阻止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
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>并把它放在你自己的代码<代码>对话框/<代码>中,这样你就可以得到完全的控制。