0

私のプロジェクトでは、COUNTRY、STATE、CITY の jcombobox を選択して塗りつぶしたいのですが、country をクリックすると、その国に関連付けられている州がいくつあるかが表示され、都市についても状態と同じことが表示されます。

これが私のコードです。どこが間違っているのか、これが正しいコードになるのか教えてください

private void cmbcountryPopupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {                                                        
       try{
            //JOptionPane.showMessageDialog(null,"hello");
            String sql= "SELECT StateName From state where Country_Id=? ";
            prst=con.prepareStatement(sql);
            prst.setString(1, cmbcountry.getSelectedItem().toString());
            prst.execute();
            rs=prst.executeQuery();

            if(rs.next()){                   
                    cmbstate.setSelectedItem(rs.getString("state"));                        
            }
        } catch(Exception e)
            {
            JOptionPane.showMessageDialog(null,e);
        }

       fillstate(cmbcountry.getSelectedIndex());

    }  
4

1 に答える 1

0

あなたの質問はあまり明確ではありませんが、3 つのコンボボックスがあると思います。国、都道府県、市区町村があり、選択した国に基づいて都道府県を入力し、選択した州に基づいて市区町村を設定します。それが必要な場合、最も簡単なオプションは次のとおりです。 // if の代わりに while を使用することに注意してください。

cmbstate.removeAllItems();
Vector<String> items = new Vector<String>();
while(rs.next())
{                   
   items.addElement(rs.getString("state"));                        
}
ComboBoxModel model = new DefaultComboBoxModel(items);
cmbState.setModel(model);

州が選択されているときの都市コンボボックスも同様です。

毎回新しいモデルを作成するのは最善の方法ではないためcmbState.addItem(String);、ループ内から別のオプションを呼び出すことができます。いずれにせよ、データに変更を加えるとリスナーが起動されるため、遊んでいるコンボボックスからリスナーを削除する必要がある場合があります。次のようなことができます:

ItemListener[] itemListeners = cmbState.getItemListeners(); for(ItemListener l: itemListeners ) cmbState.removeItemListener(l); //ここでコンボでやりたいことをします。for(ItemListener l: itemListeners ) cmbState.addItemListener(l);

于 2013-08-27T11:04:07.713 に答える