java - 从 ComboBox 中进行选择时,用数据库条目填充 JList

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

如您所见,我不太知道要使用哪种“设置/获取”,或者即使这是执行此操作的正确方法(我正在遵循 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. 创建 DefaultListModel目的。也许您希望它是 DefaultListModel<String>
  2. 创建结果集
  3. 迭代 while (resultat.next()) {...} 中的结果集循环获取感兴趣的元素。
  4. 在循环中,使用其 addElement(...) 将该元素放入您的 DefaultListModel 中方法。
  5. 通过列表的 setModel(...) 使用 DefaultListModel 对象设置 JList 的模型方法。

关于java - 从 ComboBox 中进行选择时,用数据库条目填充 JList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26947257/

相关文章:

java - 当光标位于分钟区域时,具有 dateModel "H:mm"的 JSpinner 更新小时而不是分钟

java - JDBC 领域表单例份验证

java - 比较图中的字符串

java - 对大量对象进行排序的最有效方法

java - 是否可以将泛型类型扩展到 Java 中的多个类?

java - 正确的模型- View - Controller 设计

java - JFrame 布局帮助/指南,

java - 带有 jdbc applet 的 NoClassDefFoundError

java - 为什么我必须在 JDBC 中使用回滚?

javascript - 订阅循环结束后,Angular 获取响应