【问题标题】:Fill a JList with database entries when selecting from a ComboBox从 ComboBox 中选择时,用数据库条目填充 JList
【发布时间】:2015-01-12 20:43:39
【问题描述】:

我是一名新手程序员,我正在尝试使用 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());
    }
}

如您所见,我不太清楚要使用哪种“设置/获取”,或者即使它是正确的方法(我正在遵循 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());
    }
}

【问题讨论】:

    标签: java swing jdbc combobox jlist


    【解决方案1】:

    简而言之,以下是执行您想做的事情的步骤。

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

    【讨论】:

    • 为什么我等了这么久才在这里发帖...非常感谢,这正是我所需要的。 :D 现在我需要深入研究一下 DefaultListModel 以了解它是如何工作的。
    • @ButchOverflow:很高兴您的工作顺利进行。如果您还有其他问题,请询问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多