2015-01-06 4 views
10

Есть ли способ заполнить JavaFX ComboBox или ChoiceBox со всеми перечислениями перечисления?Заполнение JavaFX ComboBox или ChoiceBox из enum

Вот что я пробовал:

public class Test { 

    public enum Status { 
     ENABLED("enabled"), 
     DISABLED("disabled"), 
     UNDEFINED("undefined"); 

     private String label; 

     Status(String label) { 
      this.label = label; 
     } 

     public String toString() { 
      return label; 
     } 
    } 
} 

В другом классе, я пытаюсь заполнить ComboBox:

ComboBox<Test.Status> cbxStatus = new ComboBox<>(); 
    cbxStatus.setItems(Test.Status.values()); 

Но я получаю сообщение об ошибке: incompatible types: Status[] cannot be converted to ObservableList<Status>

I очевидно, получают ту же проблему с ChoiceBox.

ответ

16

Если для setItems требуется ObservableList, вы должны указать его вместо массива.

Попробуйте это:

ComboBox<Status> cbxStatus = new ComboBox<>(); 
cbxStatus.setItems(FXCollections.observableArrayList(Status.values())); 

Edit: Решение James_D (см комментарий) является предпочтительным:

cbxStatus.getItems().setAll(Status.values()); 
+4

или 'cbxStatus.getItems() SetAll (Status.values ​​());' –

+0

Ах да, что один лучше.: D – Roland

+0

решения James_D это мое избранный ! Thnx –

0

Я FXML для этого. Мое перечисление имеет конструктор

<ComboBox GridPane.rowIndex="0" GridPane.columnIndex="1"> 
     <items> 
      <FXCollections fx:factory="observableArrayList"> 
       <Type fx:value="ABC"/> 
       <Type fx:value="DEF"/> 
       <Type fx:value="GHI"/> 
      </FXCollections> 
     </items> 
    </ComboBox> 

public enum Type { 

    ABC("abc"),DEF("def"),GHI("ghi"); 

    private String name; 

    private Type(String theType) { 
     this.name = theType; 
    } 

} 
+0

Возможно, более элегантным решением было бы использовать 'fx: constant', поэтому он напрямую ссылается на значения перечисления, а не полагается на статический метод' valueOf'. Некоторые редакторы могут даже обеспечить завершение при использовании 'fx: constant'. – Itai

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