从ComboBox中选择时,使用数据库条目填充JList

时间:2014-11-15 15:11:17

标签: java swing jdbc combobox jlist

我是一名新手程序员,我正在尝试使用Swing和SQL数据库创建一个基本的窗口程序。 我设法让连接工作并创建了一些允许更新数据库的表单但我找不到简单地填充JList的方法,具体取决于您从ComboBox中选择的选项。 具体来说,我的数据库有两个表(其中包括),一个名为“SERIES”,另一个名为“CLASS”,我的GUI有一个JPanel,您可以从ComboBox中选择系列,它应该在JList中显示相应的类。下方。

这是我的基本代码(我不粘贴生成的变量声明和“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());
    }
}

正如你所看到的,我不太清楚使用哪种“set / get”,或者即使这是正确的方法(我正在遵循TextField的模型......)。虽然我也看过有关DefaultListModel的内容,但我不确切知道它的作用,反正我不知道如何使用它。

感谢。

PS:这里不允许礼貌吗?我的“你好”自动删除......:/

修改 这是我的方法的最终代码:

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());
    }
}

1 个答案:

答案 0 :(得分:2)

以下是简单地执行所需操作的步骤。

  1. 创建一个DefaultListModel对象。也许你希望它是DefaultListModel<String>
  2. 创建ResultSet
  3. while (resultat.next()) {...}循环中遍历ResultSet,获取感兴趣的元素。
  4. 在循环中,使用其addElement(...)方法将该元素放入DefaultListModel。
  5. 通过列表的setModel(...)方法使用DefaultListModel对象设置JList模型。