2016-08-09 2 views
0

У меня есть старый swing Jcombobox, который я использовал для этого.Перемещение с swing 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 для заполнения.

Это мой FXML

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

и это мой Java

@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); 

Почему разве мой ComboBox заселение?

+1

Вы должны использовать «ObservableList» с JavaFX. Взгляните на то, как [Comboboxes] (http://docs.oracle.com/javafx/2/ui_controls/combo-box.htm) необходимо заполнить –

+1

@NicoT Используется «ObservableList»: тот, который возвращается 'ComboBox .getItems() ', что также возможно. – fabian

ответ

2

Вы просто не добавляете ставки в ComboBox, которые отображаются на экране.

Поскольку вы, похоже, создаете экземпляр контроллера, вы также не получите ComboBox, введенный в объект Application, который принадлежит методу начала.

BTW: В большинстве случаев это плохая идея использовать класс Application в качестве контроллера.

В случае, если набор элементов в ComboBox всегда одинаковый, для установки элементов можно использовать метод контроллера initialize. Кроме того, всегда рекомендуется указывать параметры типа.

@FXML 
private ComboBox<String> baudRateComboBox; 

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

Можно также указать элементы непосредственно в файле FXML:

<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> 

Это требует следующих импорта как инструкции по обработке:

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

Если у вас необходимо пройти baudRates, вы можете найти некоторые решения здесь: Passing Parameters JavaFX FXML

+0

Привет, Спасибо за подробный ответ. Теперь у меня это работает. Не могли бы вы объяснить, что делает ComboBox baudRateComboBox в моем коде? это из учебника, и я думал, что это инициализирует combobox? –

+1

@DisplayName Недостаточно информации, которую вы опубликовали, но я рекомендую прочитать описание в конце следующего примера http://stackoverflow.com/documentation/javafx/1580/fxml-and-controllers/ 5125/example-fxml # t = 201608100629012634808, который описывает, как работает процесс загрузки. Вероятно, поле 'baudRateComboBox' экземпляра * some * задается' FXMLLoader', но даже если это поле экземпляра, для которого вызывается метод 'start', вы никогда не используете это поле, но используете локальный вместо переменной. – fabian

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