2014-11-15 6 views
2

Я новичок-программист, и я пытался создать базовую оконную программу с помощью Swing и базы данных SQL. Мне удалось заставить соединение работать и создать некоторые формы, которые позволяют обновлять базу данных, но я не могу найти способ просто заполнить JList в зависимости от того, какой вариант вы выбираете из ComboBox. В частности, в моей базе данных есть две таблицы (среди прочих), одна из которых называется «SERIES», а другая - «CLASS», а мой графический интерфейс имеет JPanel, где вы можете выбрать серию из ComboBox, которая должна отображать соответствующие классы в JList ниже.Заполните JList с записями базы данных при выборе из ComboBox

Вот мой основной код (я не вставить сгенерированный переменные декларации и «initComponents()» метод, а просто спросить, если вам нужно), а затем текущее состояние соответствующего метода:

package dahouetgui; 
import java.sql.DriverManager; 
import java.sql.Connection; 
import java.sql.Statement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import javax.swing.JOptionPane; 

/** 
* 
* @author Antoine 
*/ 
public class GUI extends javax.swing.JFrame 
{ 
    static Connection con = null; 

    /** 
    * Creates new form DahouetGUI 
    * @throws java.lang.ClassNotFoundException 
    */ 
    public GUI() throws ClassNotFoundException 
    { 
     setTitle("Dahouet Case"); 

     initComponents(); 

     try 
     { 
      Class.forName("com.mysql.jdbc.Driver"); 

      con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dahouet","root",""); 

      try 
      { 
       Statement requete1 = con.createStatement(); 
       ResultSet resultat1 = requete1.executeQuery("select * from SERIES"); 

       while(resultat1.next()) 
       { 
        jcbSer.addItem(resultat1.getString("LIBSER")); 
       } 
      } 
      catch(SQLException e) 
      { 
       System.out.println("SQLException " + e.getMessage()); 
      } 

      try 
      { 
       Statement requete2 = con.createStatement(); 
       ResultSet resultat2 = requete2.executeQuery("select * from SERIES"); 

       while(resultat2.next()) 
       { 
        jcbSerChoice.addItem(resultat2.getString("LIBSER")); 
       } 
      } 
      catch(SQLException e) 
      { 
       System.out.println("SQLException " + e.getMessage()); 
      } 

      try 
      { 
       Statement requete3 = con.createStatement(); 
       ResultSet resultat3 = requete3.executeQuery("select * from CLASS"); 

       while(resultat3.next()) 
       { 
        jcbClaChoiceDel.addItem(resultat3.getString("LIBCLA")); 
       } 
      } 
      catch(SQLException e) 
      { 
       System.out.println("SQLException " + e.getMessage()); 
      } 
     } 
     catch(SQLException e) 
     { 
      System.out.println("SQLException " + e.getMessage()); 
     } 
    } 

private void jcbSerActionPerformed(java.awt.event.ActionEvent evt) 
{          
    try 
    { 
     Statement requete = con.createStatement(); 
     try 
     { 
      ResultSet resultat = requete.executeQuery("select * from CLASS inner join SERIES on CLASS.CODSER = SERIES.CODSER " 
                 + "where LIBSER = '" + jcbSer.getSelectedItem().toString() + "'"); 
      resultat.next(); 
      jlsCla.setList(resultat.("LIBCLA")); 
     } 
     catch(SQLException e) 
     { 
      System.out.println("SQLException " + e.getMessage()); 
     } 
    } 
    catch(SQLException e) 
    { 
     System.out.println("SQLException " + e.getMessage()); 
    } 
} 

Как вы можете видеть, что я даже не знаю, какой вид «установить/получить» использовать, или даже если это правильный способ сделать это (я после модели TextField .. .). Хотя я также видел вещи о DefaultListModel, но я не знаю точно, что он делает, и в любом случае я не знаю, как его использовать.

Спасибо.

PS: здесь нет вежливости? Мой «привет» автоматически удаляется ...:/

EDIT: Вот окончательный код для моего метода, то:

private void jcbSerActionPerformed(java.awt.event.ActionEvent evt) 
{ 
    javax.swing.DefaultListModel<String> dlmCla; 
    dlmCla = new javax.swing.DefaultListModel(); 

    try 
    { 
     Statement requete = con.createStatement(); 
     try 
     { 
      ResultSet resultat = requete.executeQuery("select * from CLASS inner join SERIES on CLASS.CODSER = SERIES.CODSER " 
                 + "where LIBSER = '" + jcbSer.getSelectedItem().toString() + "'"); 
      while(resultat.next()) 
      { 
       dlmCla.addElement(resultat.getString("LIBCLA")); 
      } 
      jlsCla.setModel(dlmCla); 
     } 
     catch(SQLException e) 
     { 
      System.out.println("SQLException " + e.getMessage()); 
     } 
    } 
    catch(SQLException e) 
    { 
     System.out.println("SQLException " + e.getMessage()); 
    } 
} 

ответ

2

Вот шаги, чтобы сделать то, что вы хотите, в двух словах.

  1. Создайте объект DefaultListModel. Возможно, вы хотите, чтобы это было DefaultListModel<String>?
  2. Создать результат ResetSet
  3. Итерации через ваш ResultSet в цикле while (resultat.next()) {...}, получая интересующий элемент (ы).
  4. В цикле поместите этот элемент в свой DefaultListModel, используя его метод addElement(...).
  5. Установите модель JList с помощью объекта DefaultListModel с помощью метода списка setModel(...).
+0

И почему я так долго ждал публикации здесь ... Большое спасибо, это было именно то, что мне нужно. : D Теперь мне нужно немного вникнуть в этот DefaultListModel, чтобы понять, как это работает. – ButchOverflow

+0

@ButchOverflow: рад, что у вас все работает. Если у вас есть дополнительные вопросы, пожалуйста, спросите. –

Смежные вопросы