2015-01-06 5 views
10

JavaFX ComboBoxまたはChoiceBoxに列挙型のすべての列挙を挿入する方法はありますか?別のクラスにおいてJavaFX ComboBoxまたはChoiceBoxを列挙型に移入

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が必要な場合は、配列の代わりに1つ与える必要があります。

はこれを試してみてください:

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

編集:James_Dの解決策は、(コメントを参照してください)好ましいものである:

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

または 'cbxStatus.getItems()SETALL(Status.valuesを())を持つ;' –

+0

ああ、その1つのより良いです: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'メソッドに頼るのではなく、直接enum値を参照します。いくつかのエディタは 'fx:constant'を使うときに補完することさえできます。 – Itai