我有俩个JComboBox一个表示原料名称,一个表示原料规格(一种原料,有多种规格)。(这俩个JComboBox一个叫c1,另一个叫c2,c1是原料名称,c2是原料规格)
在数据库内有一个原料属性表,只有这两列(原料名称和原料规格,表名叫yl_shuxing,列名叫yl_name和yl_guige)。
现在我想实现的是:在c1选择一种名称时,c2就会出现相应的规格。
我自己的想法是我用一个Select语句就可以实现,语句如下:"SELECT yl_guige FROM yl_shuxing where yl_name='"+c1.getSelectedItem().toString().trim()+"'" 
这样把表中的相应的规格就出来了,我的就是实现不了,是不是这种方法不可以啊,还有什么方法吗?我的JComboBox不是固定的,可以随时添加。谢谢各位

解决方案 »

  1.   

     ResultSet rs = Sqlconn.getStatement().executeQuery("SELECT yl_name FROM yl_shuxing");
    int i=0;
    try{

    while(rs.next()){

      name=rs.getString(1);
      ci1[i]=name;
      i++; 

    }
    }catch(Exception k5){
    System.out.println("测试");
    }

    c1=new JComboBox(ci1);
    c1.setEditable(true);
    c2=new JComboBox(ci2);
    c2.setEditable(true);

     ResultSet rs1 = Sqlconn.getStatement().executeQuery("SELECT yl_guige FROM yl_shuxing where yl_name='"+c1.getSelectedItem().toString().trim()+"'" );
     int i1 = 0;
     System.out.println(c1.getSelectedItem().toString().trim());
     
    while(rs1.next()){

    name1=rs1.getString(1);
    ci2[i1]=name1;
      i1++; 
    }
      

  2.   

    仔细看下应该能出来的,就是取值问题 看看那个JComboBox为什么娶不到值
      

  3.   

    lz的思路是可以的,显示不出来是什么原因。没检索出数据,还是往JComboBox里面设置数据时候的问题。
      

  4.   

    随手写的一个JComboBox联动的小例子,楼主可以参考一下:)                  JFrame frame = new JFrame();
    frame.setSize(200, 80);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    String[] opsBox1 = { "标题1", "标题2", "标题3" };
    final String[][] opsBox2 = {// 
    { "联动1-1", "联动1-2", "联动1-3" },// 
    { "联动2-1", "联动2-2", "联动2-3" }, //
    { "联动3-1", "联动3-2", "联动3-3" }, };

    final JComboBox cbox1 = new JComboBox(opsBox1);
    final JComboBox cbox2 = new JComboBox(opsBox2[0]);

    cbox1.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent e) {
    if (e.getSource().equals(cbox1)) {
    cbox2.removeAllItems();
    int selected = cbox1.getSelectedIndex();
    for (String value : opsBox2[selected]) {
    cbox2.addItem(value);
    }
    }
    }
    });

    frame.getContentPane().setLayout(new BorderLayout());
    frame.getContentPane().add(cbox1, BorderLayout.NORTH);
    frame.getContentPane().add(cbox2, BorderLayout.SOUTH);
    frame.setVisible(true);