2016-02-22 120 views
0

我需要創建一個Java控制檯應用程序,向用戶提供有關食物名稱的建議。這些信息將從sqlite數據庫文件中獲取。用戶將編寫文本和程序將低語項目的名稱。當用戶想要完成文本時,他按下TAB鍵,應用程序將獲得下一個項目。 我已經將所有數據庫項目記錄在ArrayList中。自動完成控制檯文本

My main idea(without everything except for the top text)

的代碼部分 - 主類

Scanner sc=new Scanner(System.in); 
    ArrayList<Food> foodList= DatabaseServices.loadAllFood(); 
    ArrayList<String> foodNameList=new ArrayList(); 
    String nameFood; 

    while (condition) {//when I have all recipe names 
     //some code 
     nameFood=sc.nextLine(); 
     foodNameList(nameFood); 
    } 

編輯:

DatabaseServices類

public ArrayList<food> loadAllFood() {//fetch data and sort them 
     ArrayList<food> foodList = new ArrayList<>(); 
     try { 
      String SQL = "SELECT * FROM foods "; 
      ResultSet data = MyDatabaseConnection.executeQuery(SQL); 


      do { 
       Food food= new Food(data.getInt("food_id"), 
         data.getString("nfood_nazev"), 
         data.getInt("food_bilkoviny"), 
         data.getInt("food_sacharidy"), 
         data.getInt("food_tuky")); 
       foodList .add(potravina); 
      } while (data.next()); 

      Collections.sort(foodList); 

     } catch (SQLException ex) { 
      Logger.getLogger(DatabaseServices.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    return foodList; 
    } 

有一些簡單的方法做T帽子???

+1

1)獲取數據2)對它們進行排序3)文本框的onChange,二進制搜索列表用於爲輸入的超弦(如果有的話)4)如果有的話,顯示它在建議 –

+0

最接近的匹配1),2)完成3)它不應該是文本框,而是jconsole。我解釋得很糟:/。列表搜索我希望使用foreach並且條件如果是類似字符串的東西。(string +「。*」) –

回答

1

Java命令行解析庫picocli最近添加了自動完成功能。

這是基於生成一個bash自動完成腳本。一旦用戶輸入完成腳本,bash shell將顯示命令,子命令或選項的可能完成項(在Windows中,您可以使用Cygwin或Babun)。如果您查看picocli源代碼,您可以看到如何爲Java枚舉生成可能的完成選項值列表。

您可以修改此選項以從數據庫生成可能的完成選項列表,生成新的完成腳本並在運行命令之前獲取此腳本。

您可能還會喜歡該庫如何讓您在使用幫助消息中使用ANSI顏色和樣式。

enter image description here

免責聲明:我是作者,因此偏頗。

0

由於@DiegoMartinoia在他的評論中說,你可以一鍵下做到這一點:

  1. 搜索上的文本(如果有因爲 性能更然後3個字符)
  2. 按字母排序
  3. 顯示前5位ish
0

如前所述,執行這五個步驟。 但是對於控制檯應用程序中的自動完成命令,您可以使用Jline庫。它的自動通過製表符。

而對於最後,你將不會被使用JConsole的,如果你不使用JMX MBean的,但是那只是供參考。(當然,如果你打算使用JMX做到這一點,那麼這是irrevelant)