2016-08-09 10 views
0

私はこのように使い慣れた古いスイングJcomboboxを持っています。スイングjComboboxからjavaFX ComboBoxへ移動

baudRatecomboBox = new JComboBox(baudRates); 
    baudRatecomboBox.setSelectedIndex(1); 
    GridBagConstraints gbc_baudRateComboBox = new GridBagConstraints(); 
    gbc_baudRateComboBox.fill = GridBagConstraints.HORIZONTAL; 
    gbc_baudRateComboBox.insets = new Insets(0, 0, 5, 5); 
    gbc_baudRateComboBox.gridx = 1; 
    gbc_baudRateComboBox.gridy = 3; 
    getContentPane().add(baudRatecomboBox, gbc_baudRateComboBox); 
String[] baudRates = { "2400", "4800", "9600", "14400", "19200", "38400", "56000", "115200" }; 

私はJavaFXを使用してアプリケーションを書き直しています。私はコンボボックスを作成することはできません。

これは

<ComboBox id="baudRatecomboBox" fx:id="baudRateComboBox" prefHeight="30.0" prefWidth="87.0" promptText="Baud" /> 

私のFXMLであり、これはなぜ私のコンボボックスの移入をイマイチ

@FXML 
ComboBox baudRateComboBox; 

public void start(Stage primaryStage) { 
    try { 
     Parent root = FXMLLoader.load(getClass().getResource("LaserControllerUI.fxml")); 
     Scene scene = new Scene(root); 
     primaryStage.setTitle("Laser Controller"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
     scene.getStylesheets().add 
     (LaserControllerUI.class.getResource("LaserControllerUI.css").toExternalForm()); 
     ComboBox<String> baudRateComboBox = new ComboBox(); 
     baudRateComboBox.getItems().addAll(baudRates);  
     baudRateComboBox.setVisible(true); 

私のJavaのでしょうか?

+1

JavaFXで「ObservableList」を使用する必要があります。 [Comboboxes](http://docs.oracle.com/javafx/2/ui_controls/combo-box.htm)に記入する方法を見てください。 –

+1

@NicoT ObservableListが使用されています: 'ComboBox .getItems() 'も可能です。 – fabian

答えて

2

画面に表示されているComboBoxに料金を追加するだけではありません。

FXMLLoaderコントローラインスタンスを作成するようにしたので、は、開始メソッドに属するApplicationオブジェクトに注入されません。

ところで:ほとんどの場合、コントローラーとしてApplicationクラスを使用することは悪い考えです。

ComboBoxの項目のセットが常に同じ場合、コントローラのinitializeメソッドを使用してアイテムを設定できます。さらに、型パラメータを指定することは常に良い考えです。

@FXML 
private ComboBox<String> baudRateComboBox; 

@FXML 
private void initialize() { 
    // called by FXMLLoader after injecting fields 
    baudRateComboBox.getItems().addAll(baudRates); 
} 

また、FXMLファイルで直接項目を指定することができます。

<?import java.lang.String?> 
<?import javafx.collections.FXCollections?> 

あなたの場合:これは、処理命令として、次の輸入を必要と

<ComboBox id="baudRatecomboBox" fx:id="baudRateComboBox" prefHeight="30.0" prefWidth="87.0" promptText="Baud"> 
    <items> 
     <FXCollections fx:factory="observableArrayList"> 
      <String fx:value="2400"/> 
      <String fx:value="4800"/> 
      <String fx:value="9600"/> 
      <String fx:value="14400"/> 
      <String fx:value="19200"/> 
      <String fx:value="38400"/> 
      <String fx:value="56000"/> 
      <String fx:value="115200"/> 
     </FXCollections> 
    </items> 
</ComboBox> 

を渡す必要があります210配列をコントローラに代入する代わりに、ここでいくつかの解を見つけることができます:Passing Parameters JavaFX FXML

+0

こんにちは、お返事ありがとうございます。私は今それを働かせます。私のコードで 'ComboBox baudRateComboBox'が何をしているのかを説明できますか?それはチュートリアルから来て、私はそれがコンボボックスを初期化していると思った? –

+1

@DisplayName投稿した情報が不十分ですが、次の例の最後にある説明を読むことをおすすめします。http://stackoverflow.com/documentation/javafx/1580/fxml-and-controllers/ 5125/example-fxml#t = 201608100629012634808には、ロードプロセスの仕組みが記載されています。おそらく* some *インスタンスの 'baudRateComboBox'フィールドは' FXMLLoader'によって設定されますが、 'start'メソッドが呼び出されたインスタンスのフィールドであっても、フィールドを使用することは決してありませんが、ローカル代わりに変数。 – fabian