2016-09-27 162 views
0

我目前有一個運行良好的數據庫。它將數據庫每列中的文本顯示爲應用程序用戶界面上的5個標籤。有些時候,根據用戶輸入的內容,我希望它顯示數據庫中的行列表,我正在考慮使用JList。數據庫中的每一行都是一個JList項目?

當前的代碼顯示在標籤是:

String sqlQuery = "select Column1, Column2, Column3, Column4, Column5 from APP.DATA123 " + 
"where (Column1 = ?) AND (Column2 = ?) AND (Column3 = ?) OR (Column1 = ?) AND (Column2 = ?)"; 

String abc = jTextField2.getText(); 
String cba = (String)jComboBox1.getSelectedItem(); 
String cab = (String)jComboBox2.getSelectedItem(); 
String data = "jdbc:derby://localhost:1527/sample"; 
    try (
      Connection conn = DriverManager.getConnection(
      data, "app", "app"); 
      PreparedStatement st = conn.prepareStatement(sqlQuery)) { 

     Class.forName("org.apache.derby.jdbc.ClientDriver"); 
     st.setString(1, abc); 
     st.setString(2, cba); 
     st.setString(3, cab);  
     st.setString(4, cba); 
     st.setString(5, cab); 
     ResultSet rec = st.executeQuery(); 
     while (rec.next()) { 
      jLabel1.setText(rec.getString("Column1")); 
      jLabel2.setText(rec.getString("Column2")); 
      jLabel3.setText(rec.getString("Column3")); 
      jLabel4.setText(rec.getString("Column4")); 
      jLabel5.setText(rec.getString("Column5")); 

     } 
     st.close(); 

有沒有讓這個如果要顯示給用戶的數據庫的多個行更簡單的方法,我可以創建一個JList,以便一行中的所有列(可能還有一個圖像,但我稍後會考慮這些)顯示爲JList上的一個項目。因此Columns1-5是一個JlistItem,然後下一個數據庫行的列1-5是下一個JList項目等?

或者其他類似的方式,任何人都知道?

每列只有大約5-15個字符沒有那麼多的文本。

+0

使用JTable:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html –

回答

0

您必須將您的JList綁定到ListModel實現並填充該ListModel。在你的情況中 - 你的ListModel中的每個項目都是ResultSet中每行的所有項目的連接字符串。類似以下內容:

DefaultListModel<String> model = new DefaultListModel<>(); 
JList list = new JList(model); 
JScrollPane pane = new JScrollPane(list);//add the "pane" to your form next line 

String abc = jTextField2.getText(); 
String cba = (String) jComboBox1.getSelectedItem(); 
String cab = (String) jComboBox2.getSelectedItem(); 
String data = "jdbc:derby://localhost:1527/sample"; 
    try(
Connection conn = DriverManager.getConnection(
     data, "app", "app"); 
PreparedStatement st = conn.prepareStatement(sqlQuery)) 

{ 

    Class.forName("org.apache.derby.jdbc.ClientDriver"); 
    st.setString(1, "abc"); 
    st.setString(2, "cba"); 
    st.setString(3, "cab"); 
    st.setString(4, "cba"); 
    st.setString(5, "cab"); 
    ResultSet rec = st.executeQuery(); 

    // may want to make it constant (final static) 
    final String SPACE = " "; 
    StringBuilder sBuilder = new StringBuilder(); 

    while (rec.next()) { 
     sBuilder.setLength(0); 
     sBuilder 
      .append(rec.getString("Column1")).append(SPACE) 
      .append(rec.getString("Column2")).append(SPACE) 
      .append(rec.getString("Column3")).append(SPACE) 
      .append(rec.getString("Column4")).append(SPACE) 
      .append(rec.getString("Column5")).append(SPACE); 

     model.addElement(sBuilder.toString()); 

    } 
    st.close(); 

this文章看看,可能是你的情況非常有幫助。而且,BTW,Google搜索或閱讀文檔比寫一個關於SO的問題並等待答案快得多=)。乾杯。

+0

當我使用聲明 「JList list = new JList(model);」的代碼行時, 它給出拒絕說明變量未被使用(因爲我的jlist被稱爲「jList1」)或者如果我用jList1替換列表,它聲明「局部變量隱藏了一個字段」。所以我用「jList1.setModel(model);」替換它。它現在沒有被拒絕,但不起作用。 另外,當我創建jList時,它會自動填充其中的一些項目,稱爲「item1,item2等等」。我沒有做任何事情去除這些,並不確定這是什麼導致問題..... – Evan12

+0

已解決本期 – Evan12

相關問題