2013-05-30 75 views
0

我的問題如下:JavaFX的組合框<Integer>類型不匹配

class xxx { 
@FXML 
private Combobox<Integer> cmb_year; 
... 
public void method() 
{ 
int year=2013; 
cmb_year.getItems().add(year); 
cmb_year.setValue(year) ---> argumenttype mismatch 
} 
} 

這是我的代碼片段,但顯示我遇到的問題。

我試着

  • 使 「年整型」 到 「整年」
  • 訪問overcmb_year.getSelectionModel()。選擇(新的整數(年))
  • 訪問過cmb_year。 getSelectionModel()。select(year)

總是會導致參數類型不匹配。

這是什麼原因造成的?

+0

它是運行時還是編譯錯誤? –

+0

運行時,編譯時甚至沒有警告 – billdoor

+0

你使用'StringConverter'嗎? –

回答

0

如果你試圖設置選擇哪個項目,要與組合框的selectionModel設置工作:

cmb_year.getSelectionModel().select(cmb_year.getItems().indexOf(year)); 

您也可以嘗試setSelectedItem(year)selectLast()

+0

如果我沒有記錯,ComboBox API會自動將選定的項目設置爲setValue()中指定的值,如果它恰好已經在ComboBox的列表視圖中。 – scottb

0

這可能只是ComboBox未正確或完全初始化的問題。我從不使用ComboBoxes「開箱即用」。我使用幾行代碼來設置它們。

以下是從初始化()方法的代碼片段在我的對話控制器類(在此組合框將顯示機構對象的列表):

// this first line gets the data from my data source 
    // the ComboBox is referenced by the variable 'cbxInst' 

    ObservableList<Institution> ilist = Institution.getInstitutionList(); 
    Callback<ListView<Institution>, ListCell<Institution>> cellfactory = 
      new Callback<ListView<Institution>, ListCell<Institution>>() { 
       @Override 
       public ListCell<Institution> call(ListView<Institution> p) { 
        return new InstitutionListCell(); 
       } 
      }; 

    cbxInst.setCellFactory(cellfactory); 
    cbxInst.setButtonCell(cellfactory.call(null)); 
    cbxInst.setItems(ilist); 

的關鍵點,這裏有:

  • 我定義了一個單元工廠來爲ComboBox生成ListCell實例來顯示。

  • 我使用工廠創建一個ListCell實例來初始化Button Cell。

爲了完整起見,這裏是該機構的ListCell實例被創建的私有成員類:

private final class InstitutionListCell extends ListCell<Institution> { 

    @Override 
    protected void updateItem(Institution item, boolean empty){ 
     super.updateItem(item, empty); 

     if (item != null) {     
      this.setText(item.getName()); 

     } else { 
      this.setText(Census.FORMAT_TEXT_NULL); 
     } 
    } 
} 

如果你要初始化你的組合框以類似的方式,它可能是你的問題將被解決。