【问题标题】:How to do test on Item selected In JCombobox如何对在 JCombobox 中选择的项目进行测试
【发布时间】:2013-03-01 21:21:27
【问题描述】:

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

所以我有两个 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中选定项目的'num',

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  ;
    }
}

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

private void formWindowOpened(java.awt.event.WindowEvent evt) {

fillJCBOXPrj(); fillJCBOXActivite();

}

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

我猜错误来自 'n.num'

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

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

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

【问题讨论】:

  • 为什么要让自己变得困难,并为您的班级和成员分配这样不具描述性的名称?
  • 我打赌你会在这里得到ClassCastExceptionRF n = (RF) jComboBox1.getSelectedItem(); 请查看Stack Overflow question checklist 并相应地编辑您的帖子。
  • 尝试 ... 尝试 { RF n = (RF) jComboBox1.getSelectedItem(); } catch( 异常 e) { e.printStackTrace(); }
  • 请学习java命名约定并遵守它们。

标签: java string swing if-statement


【解决方案1】:

关于您的代码的几个 cmets。 您应该将您的字段标记为私有,然后通过 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 !!

【讨论】:

  • 好吧,我想做一个测试,如果第一个 Comobox 不返回选定的项目,第二个 Jcombobox 不显示!如果我在 try..catch 之间执行此操作,请继续给我一个错误,我会执行“n.num”
  • @Zero-dev 我没有在你的代码中看到第二个 JComboBox,我只看到一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多