2016-11-30 56 views
0

我已經創建了JOptionPane.showInputDialog,以便在我的實現中有5個預定義的查詢。 但是,當用戶選擇一個選項,並點擊「確定」按鈕面板關閉。 我想要當用戶點擊「確定」按鈕,面板不會關閉,但仍然打開,以便用戶可以選擇另一個查詢,如果他想要的話。 我如何改變「ok」按鈕動作?有解決方案嗎? 我的代碼如下:如何更改JOptionPane.showInputDialog中的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()); 
      } 
    } 

回答

2

不要使用的JOptionPane此,而是使用非模態的JDialog(JDialog API link),一個保持打開狀態,因爲作爲一個JDialog,你是在完全控制何時或是否關閉。這些都很容易創建,類似於JFrames,除了在構造函數中傳遞父窗口,通常是JFrame,標題和ModalityType,這裏是ModalityType.MODELESS。

+0

我想要一個下拉選擇列表,以便用戶可以從該列表中選擇一個查詢。爲此,我使用了JOptionPane.showInputDialog。我沒有找到如何使用JDialog製作它。有沒有解決方法? – joan

+0

@joan:Re'「我沒有找到......」「 - 你找的太具體了,你永遠不會找到解決問題的確切解決方案,但幸運的是,你可以找到解決方案如何解決問題的每個部分,然後使用強大的大腦將這些小型解決方案結合到您自己的宏偉解決方案中。這就是編程的全部內容。您知道如何製作下拉選擇列表 - 使用JComboBox,您知道如何製作JDialog - 查看其API,構建它並將組合框放入其中,然後繼續前進,直到找到解決方案。我相信你 –

相關問題