2016-05-19 84 views
0

這是UserController.java類。我無法從JavaFX中的數據庫加載用戶名combobox

public ObservableList<UserModelItem> options = FXCollections.observableArrayList(); 
@FXML 
private ComboBox<UserModelItem> combo; 
This is the UserModelItem.java.class 

public static class UserModelItem{ 
     private final SimpleStringProperty username; 
     public UserModelItem(String user){ 
      super(); 
      this.username = new SimpleStringProperty(user); 
     } 
     public String getUsername() { 
      return username.get(); 
     } 
     public void setUsername(String uname){ 
      username2.set(uname); 
     } 
    } 

這是UserController.java.class

initialize方法
public void initialize(URL location, ResourceBundle resources) { 
combo.setItems(options); 
} 

這此FXML參照ComboBox-

<ComboBox fx:id="combo" layoutX="131.0" layoutY="377.0" onAction="#fillComboBox" prefWidth="150.0" /> 

這fillComboBox()函數被分配給組合框與fx:id組合通過SceneBuilder以及UserController類。

public void fillComboBox(ActionEvent event){ 
      try{ 
       Connection connect = SqLiteConnection.Connector(); 
       String query = "select username from employee"; 
       PreparedStatement ps = connect.prepareStatement(query); 
       ResultSet rs = ps.executeQuery(); 
      while(rs.next()){ 
       options.add(new UserModelItem(rs.getString("username"))); 
      } 
      ps.close(); 
      rs.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

這是轉換ObservableList到與字符串

combo.setConverter(new StringConverter<UserModelItem>() { 

      @Override 
      public String toString(UserModelItem object) { 
       return object.getUsername(); 
      } 

      @Override 
      public UserModelItem fromString(String string) { 
       // TODO Auto-generated method stub 
       return null; 
      } 
     }); 
} 

我檢查了大部分的答案在計算器的功能,我的代碼是相同的還是那些我不能填充組合框。

+0

請編輯您的問題,幷包含您的FXML文件中引用'fillComboBox'的元素。 – VGR

+0

@VGR我已將FXML引用添加到組合框。請檢查 –

回答

1

無論何時用戶選擇新值,都會觸發組合框的操作。最初,組合框沒有項目,所以選擇是不可能的,並且用戶不能觸發動作,這意味着永遠不會調用fillComboBox

我猜這不是你的意圖,只有當用戶改變它的值時,ComboBox纔會刷新自己。您可能應該刪除onAction,並直接從您的initialize方法中調用fillComboBox

+0

對不起,延遲迴復,但您的建議工作。我剛剛刪除了與組合框關聯的onAction事件,並在初始化方法中調用了fillComboBox()函數,並且瞧.......它工作了......十億多謝了你。已經接受你的回答.... –