2013-03-11 1 views
0

Я хочу получить результирующий набор с двумя полями из моей БД.Java Combobox, управляющий 2 поля из базы данных

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

И затем я хочу показать поле «name_prov» в comboBox (как элемент). Но я также хочу иметь свой «id_prov», который является идентификатором (PRIMARY KEY) в качестве значения для этого элемента. Это служит для того, чтобы связать имя (поставщиков в этом случае) с его идентификатором, просто используя combobox.

Это код события 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 ); 
    } 

В любом случае я могу это сделать?

ответ

6

Сначала создайте POJO, в котором будут храниться как ваши name, так и id.

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. 
      } 
    }); 
+0

Я просто хотел сказать вам, сэр .... вы потрясающие! – Carlos

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); 
    }   
} 

Надеюсь, что это сработает для вас. Заметьте, что мое имя моей combobox - имя банка.

Смежные вопросы