Java组合框Swing

4
我的表格有两个字段:
 ProductID  (Primary Key)
 ProductName  (duplicate values will be present)

我已经从上面的表格中将productName刷新到组合框中。
当用户从Combobox中的产品列表中选择一个Item时,我需要获取所选产品的相应ID。
try {
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/kart","root","");
    PreparedStatement statement=connection.prepareStatement("SELECT product_name,product_id from allproducts");
    ResultSet result = statement.executeQuery();

    while(result.next()){
        combo.add(result.getString(1));
    } 
} catch (SQLException ec) {
    System.out.println("Connection Failed! Check output console");
    ec.printStackTrace();
    return;
}

你的问题不完整,因为它没有告诉我们你遇到了什么问题或者你尝试了什么代码。 - Hovercraft Full Of Eels
你遇到了什么确切的问题?请完整描述你的问题。 - rachana
1个回答

3
您的问题有些不完整,但我猜测您的JComboBox是由字符串填充的。如果是这样,最好使用一个自定义类的对象来填充JComboBox(或更好的是其模型),该自定义类将您的ProductID与ProductName结合起来。要使组合框显示名称,您需要为您的类提供一个返回名称的toString()方法,或者为您的组合框提供一个单元格渲染器来显示名称。 编辑
例如,创建一个MyComboItem类,给它两个从数据库中获取的字符串字段,给它一个显示产品名称的toString()方法,并用此类型的项目填充您的JComboBox。
class MyComboItem {
   private String productId;
   private String productName;

   public MyComboItem(String productId, String productName) {
      this.productId = productId;
      this.productName = productName;
   }

   public String getProductId() {
      return productId;
   }

   public String getProductName() {
      return productName;
   }

   @Override
   public String toString() {
      return productName;
   }
}

编辑 2

可以像这样使用:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;

public class ComboItemTest {
   public static void main(String[] args) {
      DefaultComboBoxModel<MyComboItem> comboModel = 
              new DefaultComboBoxModel<MyComboItem>();

      // note that here you would fill the model with data from your database ***
      comboModel.addElement(new MyComboItem("x1234A", "Product 1"));
      comboModel.addElement(new MyComboItem("x1235A", "Product 2"));
      comboModel.addElement(new MyComboItem("x1236A", "Product 3"));
      comboModel.addElement(new MyComboItem("x1237A", "Product 4"));
      comboModel.addElement(new MyComboItem("x1238A", "Product 5"));
      comboModel.addElement(new MyComboItem("x1239A", "Product 6"));

      final JComboBox<MyComboItem> combobox = new JComboBox<MyComboItem>(comboModel);

      combobox.addActionListener(new ActionListener() {

         @Override
         public void actionPerformed(ActionEvent e) {
            MyComboItem item = (MyComboItem) combobox.getSelectedItem();
            if (item != null) {
               System.out.printf("You've selected Product Name: %s, Product ID: %s%n", 
                     item.getProductName(), item.getProductId());
            }
         }
      });

      JOptionPane.showMessageDialog(null, new JScrollPane(combobox));

   }
}

第三步编辑
在您的情况下,您将使用ResultSet中的信息填充模型。大概像这样:

   ResultSet result = statement.executeQuery();

   while(result.next()){
       String productName = result.getString(1);
       String productId = result.getString(2); // ???? not sure if this is valid
       MyComboItem comboItem = new MyComboItem(productId, productName);
       comboModel.addElement(comboItem);
   }

1
当我从组合框中选择产品名称时,我想要获取其ID。 - nosdalg
@Explore-X:我已经解释了如何做。如果您需要更多帮助,请编辑您的问题并提供更完整的信息。 - Hovercraft Full Of Eels

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接