2017-03-02 53 views
0

我是javafx中的新手我无法想出解决方法。将mysql数据绑定到javafx中的Combobox中

我有mysql表people

------------------ 
id  | name 
------------------ 
int,ai,pk | string 
------------------ 

我想数据填充到组合框只name列表,然后每一次我点击下拉框,该值应该是id。请帮帮我。

回答

0

试试这个演示,其中id_valuename的相关id

public class PopulateComboBoxDemo extends Application { 

    private ComboBox<String> people = new ComboBox<>(); 
    private List<String> ids = new ArrayList<>(); 

    @Override 
    public void start(Stage primaryStage) { 
     this.populateData(); 

     BorderPane root = new BorderPane(); 
     root.setCenter(people);  
     Scene scene = new Scene(root, 300, 250); 

     people.setOnAction(e -> { 
      int index = people.getSelectionModel().getSelectedIndex(); 
      //here is the id_value 
      String id_value = ids.get(index); 
      System.out.println("The id of " + people.getItems().get(index) + " is : " + id_value); 
      // 
      //......... 
      // 
     });  
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    private void populateData() { 
     this.people.getItems().clear(); 
     this.ids.clear(); 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","user","password"); 
      String sql = "select name, id from person"; 
      PreparedStatement st = con.prepareStatement(sql); 
      ResultSet rs = st.executeQuery(); 
      int index = 0; 
      while(rs.next()) { 
       this.people.getItems().add(index, rs.getString("name")); 
       this.ids.add(index, String.valueOf(rs.getInt("id"))); 
       index++; 
      } 
      con.close(); 
     } catch (ClassNotFoundException | SQLException ex) { 
      Logger.getLogger(PopulateComboBoxDemo.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    public static void main(String[] args) { 
     launch(args); 
    } 
} 
1

如果你使用JPA来管理你的关系数据,那么这段代码应该做的工作,否则你将有你的表行第一映射为对象。 祝你好运!

List<People> PeopleList = em.createQuery("SELECT p FROM People p").getResultList(); 
    ObservableList<People> peopleData = FXCollections.observableList(PeopleList); 
    PeopleList.add(null); 

yourCombo.setCellFactory((comboBox) -> { 
     return new ListCell<People>() { 
      @Override 
      protected void updateItem(People item, boolean empty) { 
       super.updateItem(item, empty); 

       if (item == null || empty) { 
        setText("Select"); 
        yourCombo.getSelectionModel().clearSelection(); 
       } else { 
        setText(item.getName(); 
       } 
      } 
     }; 
    }); 


     yourCombo.setConverter(new StringConverter<People>() { 
     @Override 
     public String toString(People people) { 
      if (people == null) { 
       return "Select"; 
      } else { 
       return people.getName(); 
      } 
     } 

     @Override 
     public People fromString(String nameString) { 
      return null; // No conversion fromString needed. 
     } 
    }); 



    yourCombo.setItems(peopleData); 
+0

感谢您的快速回复。我会稍后检查你的代码,如果我打算使用JPA因为我目前使用我的自定义代码实体的人..即时通讯首先要学习jpa ..非常感谢你提前.. –

+0

不客气! – 2017-03-03 15:27:00

相关问题