0

我想从我的数据库中获得一个包含 2 个字段的结果集。

 rs=Con.sqlQueryTable("Select id_prov, name_prov from prov");

然后我想在组合框中显示名为“name_prov”的字段(作为项目)。但我也想让我的“id_prov”,即 ID(主键)作为这个项目的值。这用于仅通过使用组合框将(在这种情况下为提供者的)名称与其 ID 相关联。

这是我当前使用的 JComboBox 事件 FocusGained 的代码。

try {
        //CBProv is the Combobox
        CBProv.removeAllItems();


        rs=Con.sqlQueryTable("Select id_prov, name_prov from prov");

        while(rs.next())
        {

            CBProvedores.addItem(rs.getString("name_prov"));
            //Here should be the Value related to the item I am creating



        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, "Error" + e  );
    }

无论如何我可以做到这一点吗?

4

2 回答 2

6

首先创建一个 POJO,它将同时保存您的nameid.

public class ComboItem {
    private String id;
    private String name;

    public ComboItem(String id, String name) {
        this.id = id;
        this.name = name;
    }

    // Add the getter and setter as you want.

    // This will be used internally by JComboBox as the label to be displayed.
    @Override
    public String toString() {
        return name;
    }
}

然后使用这个 POJO 对象放入你的JComboBox.

try {
        //CBProv is the Combobox
        CBProv.removeAllItems();

        rs=Con.sqlQueryTable("Select id_prov, name_prov from prov");

        while(rs.next())
        {                
            String id = rs.getString("id_prov"); // Get the Id
            String name = rs.getString("name_prov"); // Get the Name

            ComboItem comboItem = new ComboItem(id, name); // Create a new ComboItem
            CBProv.addItem(comboItem); // Put it into the ComboBox

        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, "Error" + e  );
    }

最后要获得选定的值,您可以这样做:-

CBProv.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                ComboItem comboItem = (ComboItem) CBProv.getSelectedItem();
                // comboItem.getId(), comboItem.getName() - Use as you wish.
            }
    });
于 2013-03-11T06:19:08.203 回答
0

您好,我也是 java 和 javafx 的新手。这就是我在 javafx 中所做的,它对我有用希望你可以在 java 中解决它。

  private void fillProviders()
  {
    List<String> providerList = new ArrayList<String>();

  try
    {   
        String Sql = "select * from prov ";
        pat= conn.prepareStatement(Sql);
        rs=pat.executeQuery();

        while (rs.next())
        {
            providerList.add(rs.getString("id_prov")+" "+ rs.getString("name_prov"));
        }

        ObservableList<String> provider =  FXCollections.observableArrayList(providerList);
            bankName.setItems(provider);  
    }

    catch( Exception e)
    {
        JOptionPane.showMessageDialog(null, e);
    }         
}

希望对你有效。请注意,我的组合框名称是 bankName

于 2015-11-26T06:45:08.130 回答