Java 如何更改JOptionPane.showInputDialog中的ok按钮操作

Java 如何更改JOptionPane.showInputDialog中的ok按钮操作,java,swing,joptionpane,Java,Swing,Joptionpane,为了在我的实现中有5个预定义的查询,我制作了一个JOptionPane.showInputDialog。 但是当用户选择一个选项并点击“ok”按钮时,面板关闭。 我想当用户点击“ok”按钮时,面板不会关闭,但会保持打开状态,以便用户可以根据需要选择其他查询。 如何更改“确定”按钮操作?有解决办法吗? 我的代码如下: ... String sparqlQueryString = new String(); String[] queryOptions = { "1. ...", "2. ....",

为了在我的实现中有5个预定义的查询,我制作了一个JOptionPane.showInputDialog。 但是当用户选择一个选项并点击“ok”按钮时,面板关闭。 我想当用户点击“ok”按钮时,面板不会关闭,但会保持打开状态,以便用户可以根据需要选择其他查询。 如何更改“确定”按钮操作?有解决办法吗? 我的代码如下:

...
String sparqlQueryString = new String();
String[] queryOptions = { "1. ...",
"2. ....",
"3. ...",
"4. ...",
5. ..."};

JPanel myPanel = new JPanel();        

String sparqlQueries = (String)JOptionPane.showInputDialog(null, myPanel, "Predefined SparQL Queries", JOptionPane.PLAIN_MESSAGE, null, queryOptions, queryOptions[0]);
switch(sparqlQueries){
        case "1. ...":
        sparqlQueryString = ...
        myCode
        break;
        case "2. ...":
        sparqlQueryString = ...
        myCode
        break;
        case "3. ...":
        sparqlQueryString = ...
        myCode
        break;
        case "4. ...":
        sparqlQueryString = ...
        myCode
        break;
        case "5. ...":
        sparqlQueryString = ...
        myCode
        break;

if(!sparqlQueryString.isEmpty()) {
        File finalResults = new File(args[1]);
            try (FileWriter fileWriter = new FileWriter(finalResults)) {
                StringBuilder results = new StringBuilder();

                Query query = QueryFactory.create(sparqlQueryString);
                QueryExecution qexec =     QueryExecutionFactory.sparqlService("http://localhost:8890/sparql", query, new PreemptiveBasicAuthenticator(new SimpleAuthenticator(virtuosoUserName, virtuosoPassword.toCharArray()), true));

                ResultSet resultSet = qexec.execSelect();
                List<String> columnNames = resultSet.getResultVars();
                while ( resultSet.hasNext() ) {
                    QuerySolution freqresult = resultSet.next();
                    int i = 0;
                    for(String var : columnNames)
                    {
                        i=i+1;
                        results.append(var).append(":");

                        if (freqresult.get(var) == null)
                            results.append("{null}");
                        else if (freqresult.get(var).isLiteral()) {
                             results.append(freqresult.getLiteral(var).toString().substring(freqresult.getLiteral(var).toString().lastIndexOf("#")+1)); 
                        }
                        else {
                            results.append(freqresult.getResource(var).toString().substring(freqresult.getResource(var).toString().lastIndexOf("#")+1));
                            //results.append(" ");
                        }
                        if(i!=columnNames.size()){
                            results.append(';');
                        }
                    }
                    results.append("\n");
                }
                int last = results.lastIndexOf("\n");
                if (last >= 0) { results.delete(last, results.length()); }
                //qexec.close();

                fileWriter.write(results.toString());
            }
    }
。。。
String sparqlQueryString=新字符串();
字符串[]queryOptions={“1…”,
"2. ....",
"3. ...",
"4. ...",
5. ..."};
JPanel myPanel=新的JPanel();
String sparqlquerys=(String)JOptionPane.showInputDialog(null,myPanel,“预定义的SparQL查询”,JOptionPane.PLAIN_消息,null,queryOptions,queryOptions[0]);
开关(SPARQLQUERES){
案例“1…”:
sparqlQueryString=。。。
麦可德
打破
案例“2…”
sparqlQueryString=。。。
麦可德
打破
案例“3…”
sparqlQueryString=。。。
麦可德
打破
案例“4…”
sparqlQueryString=。。。
麦可德
打破
案例“5…”:
sparqlQueryString=。。。
麦可德
打破
如果(!sparqlQueryString.isEmpty()){
文件finalResults=新文件(args[1]);
try(FileWriter FileWriter=newfilewriter(最终结果)){
StringBuilder结果=新建StringBuilder();
Query=QueryFactory.create(sparqlQueryString);
QueryExecution qexec=QueryExecutionFactory.sparqlService(“http://localhost:8890/sparql,查询,新的抢占式基本身份验证程序(新的SimpleAuthenticator(VirtuosourName,VirtuosPassword.toCharArray()),true);
ResultSet ResultSet=qexec.execSelect();
List columnNames=resultSet.getResultVars();
while(resultSet.hasNext()){
QuerySolution freqresult=resultSet.next();
int i=0;
for(字符串变量:columnNames)
{
i=i+1;
结果。追加(var)。追加(“:”);
if(freqresult.get(var)==null)
results.append(“{null}”);
else if(frequeresult.get(var.isLiteral()){
results.append(freqresult.getLiteral(var.toString().substring(freqresult.getLiteral(var.toString().lastIndexOf(“#”)+1));
}
否则{
results.append(freqresult.getResource(var.toString().substring(freqresult.getResource(var.toString().lastIndexOf(“#”)+1));
//结果:追加(“”);
}
如果(i!=columnNames.size()){
结果:追加(“;”);
}
}
结果。追加(“\n”);
}
int last=results.lastIndexOf(“\n”);
如果(last>=0){results.delete(last,results.length());}
//qexec.close();
write(results.toString());
}
}

不要为此使用JOptionPane,而是使用非模态JDialog(),一个保持打开状态的窗口,因为作为JDialog,您可以完全控制它何时关闭或是否关闭。这些窗口很容易创建,与JFrames类似,只是在构造函数中,您可以传入父窗口,通常是JFrame、标题和ModalityType,这里是ModalityType.MODELESS。

不要为此使用JOptionPane,而是使用非模态窗口JDialog(),一个保持打开的窗口,因为作为JDialog,您可以完全控制它何时关闭或是否关闭。这些窗口很容易创建,与JFrames类似,只是在构造函数中,您可以传入父窗口,通常是JFrame、标题和ModalityType,这里是ModalityType.MODELESS。

我想要一个下拉选择列表,以便用户可以选择来自该列表的查询。因此,我使用了JOptionPane.showInputDialog。我没有找到如何使用JDialog进行查询。有什么解决方案吗?@joan:Re
“我没有找到如何。。。"
——你搜索得太具体了,你永远也找不到问题的确切解决方案,但幸运的是,你可以找到解决问题每个部分的解决方案,然后用你强大的大脑将这些小解决方案组合成你自己的大解决方案。这就是编程的全部内容。你可以现在,如何制作下拉选择列表——使用JComboBox,您知道如何制作JDialog——查看它的API,构造它,并将组合框放入其中,然后继续进行,直到找到解决方案。我对您有信心。我希望有一个下拉选择列表,以便用户可以从该列表中选择查询。为此,我使用了JOptionPane.showInputDialog。我没有找到如何使用JDialog。有什么解决方案吗?@joan:Re
“我没有找到如何…”
——你搜索得太具体了,你永远也找不到问题的确切解决方案,但幸运的是,你可以找到解决问题每个部分的解决方案,然后用你强大的大脑将这些小解决方案组合成你自己的大解决方案。这就是编程的全部内容。你可以现在,如何制作一个下拉选择列表——使用JComboBox,您知道如何制作JDialog——查看它的API,构造它,并将组合框放入其中,然后继续进行,直到找到解决方案。我对您有信心