【发布时间】: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