-5

はっきりしていなかったので、はっきりと主題を再形成したい。

だから私は2つのJComboboxを持っています。最初にアイテムを選択すると、2番目にアイテムが表示されます。

1番目と2番目のJComboboxは、mysqlからの要求で満たされています。

私は2つの方法を作成します

最初のJComboboxを埋めるための1つ:

コード:

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 methode:最初のJComboboxで選択されたアイテムに応じて2番目の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+"'** ");

クラスRF:

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)

したがって、最初のJComboboxにアイテムがない場合は何もしないように、n.numでテストを実行します。

助けてくれてありがとう、そして私は今はっきりしていることを願っています原因は英語では良くありません

4

1 に答える 1

1

コードに関するいくつかのコメント。フィールドをプライベートとしてマークしてから、ゲッター/セッターを介してフィールドにアクセスする必要があります。

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 に答える