-5

我想清楚地重新定义我的主题,因为它不清楚。

所以我有两个 JCombobox。如果我在第一个中选择一个项目,第二个显示项目。

第一个和第二个 JCombobox 填充来自 mysql 的请求,

我创建了两个方法,

一个填充第一个 JCombobox :

代码 :

public void fillJCBOXPrj(  )
  {
      connexion c = new connexion();
      Statement s ;
       ResultSet rs ;
        try {
           s = c.createStatement();
     rs =c.selection("SELECT Distinct(IdProjet),idpro,NomProjet FROM projet where projet.iduser='"+this.getid()+"' ");
     while(rs.next())
     {
             String num =  rs.getString("idpro");
             String nom = rs.getString("NomProjet");
             String ref  = rs.getString("IdProjet");
             jComboBox1.addItem(new RF(nom,ref,num));
     }  } catch (Exception ex) {
             ex.printStackTrace();
        }
  }

sconde 方法:根据第一个 JCombobox 中的选定项填充第二个 JCombobox

Code :

 public void fillJCBOXActivite()
  {
       RF n = (RF) jComboBox1.getSelectedItem();

      connexion c = new connexion();

      Statement s ;
       ResultSet rs ;
        try {
           s = c.createStatement();
            System.out.println(n.num);
     rs =c.selection("SELECT idactiv,NomActiviter,Phase FROM activiter WHERE activiter.IDProjet='"+n.num+"' ");
     while(rs.next())
     {
             String num =  rs.getString("idactiv");
             String nom = rs.getString("NomActiviter");
             String ref  = rs.getString("Phase");
             jComboBox3.addItem(new RF(nom,ref,num));

     }  } catch (Exception ex) {
             ex.printStackTrace();
        }

  }

RF n = (RF) jComboBox1.getSelectedItem(); 调用类 RF 以返回请求中使用的第一个 JCombobox 中所选项目的“数量”,

RF **n** = (RF) jComboBox1.getSelectedItem();
.....
....
  rs =c.selection("SELECT idactiv,NomActiviter,Phase FROM activiter WHERE activiter.IDProjet=**'"+n.num+"'** ");

射频类:

class RF
{
    public final String nom;
        public final String ref;
    public final String num;



    public RF(String nom, String ref,  String num)
    {
        this.nom = nom;
        this.num = num;
                this.ref = ref;
    }


    @Override
    public String toString()
    {
        return   ref +" - " +nom  ;
    }
}

最后我确实在应用程序启动时调用了方法,所以我这样做了,

私人无效formWindowOpened(java.awt.event.WindowEvent evt){

填充JCBOXPrj(); 填充JCBOXActivite();

}

但问题是,如果我在第一个 JCombobx 中没有任何项目(数据库表中没有数据),那么它会在这一行中给出错误

我猜错误来自'n.num'

java.lang.NullPointerException
    at UserFrame.fillJCBOXActivite(UserFrame.java:202)

所以想对 n.num 进行测试,如果第一个 JCombobox 没有 Items 则什么也不做

感谢您的帮助,我希望现在很清楚,因为英语不好

4

1 回答 1

1

关于您的代码的一些评论。您应该将您的字段标记为私有,然后通过 getter/setter 访问它们。

class RF
{
private final String nom;
private final String ref;
private final String num;

无论如何,我不知道为什么它们是最终的(我认为它们不应该)。然后

 RF n = (RF) jComboBox1.getSelectedItem(); 

肯定会抛出 ClassCastException,所以永远不会到达这一行

 if(!(n.num.equals(""))) // dont work !!
于 2013-03-01T21:26:55.337 回答