我是一名菜鸟程序员,我试图使用 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());
}
}
最佳答案
简而言之,以下是执行您想要的操作的步骤。
- 创建 DefaultListModel目的。也许您希望它是
DefaultListModel<String>
? - 创建结果集
- 迭代
while (resultat.next()) {...}
中的结果集循环获取感兴趣的元素。 - 在循环中,使用其
addElement(...)
将该元素放入您的 DefaultListModel 中方法。 - 通过列表的
setModel(...)
使用 DefaultListModel 对象设置 JList 的模型方法。
关于java - 从 ComboBox 中进行选择时,用数据库条目填充 JList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26947257/