ComboBox и ChoiceBox не показывают контент - PullRequest
0 голосов
/ 29 марта 2019

ComboBox и CheckBox устанавливают элементы внутри него https://ibb.co/7YWQfLh,, но не отображают элементы https://ibb.co/Mfy2mZb

Я создаю поля на разных панелях (HBox, VBox, AnchorPane, GridPane), результат тот же.Я использовал Enum и обычную String, и результат тот же.

public class TestFXController {

    @FXML
    private ComboBox<String> asd;

    @FXML
    private ChoiceBox<String> fgh;

    @FXML
    void initialize() {
        ObservableList<String> langs = 
            FXCollections.observableArrayList("Java", "JavaScript", "C#", "Python");
        asd = new ComboBox<>(langs);
        fgh = new ChoiceBox<>(langs);

    }
}
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-    Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"     xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="TestFXController">
   <children>
      <ComboBox fx:id="asd" prefWidth="150.0" />
      <ChoiceBox fx:id="fgh" layoutX="14.0" layoutY="70.0" prefWidth="150.0" />
   </children>
</AnchorPane>

Что не так.Я хочу этот результат.

https://metanit.com/java/javafx/pics/4.16.png

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Ваше поле со списком и поле выбора уже существует, если они должны корректировать идентификаторы fx:, установленные в вашем FXML (asd и fgh), поэтому вам не нужно следующее:

asd = new ComboBox<>(langs);
fgh = new ChoiceBox<>(langs);

С помощью вашего метода инициализации вы можете, например, установить элементы в поле со списком следующим образом:

ObservableList<String> langs = FXCollections.observableArrayList("Java", "JavaScript", "C#", "Python");
asd.setItems(langs);

Это должно работать нормально, это подходит для меня, как вы можете видеть на рисунке ниже, при условии, что у вас установлен правильный fx: id (который вы, похоже, видите).

enter image description here

Надеюсь, это поможет:)

1 голос
/ 29 марта 2019

В дополнение к тому, что сказал Роберт, если вы хотите меньше кода в своем проекте, вы можете добавить элементы в fxml следующим образом:

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="TestFXController">
    <children>
        <ComboBox fx:id="asd" prefWidth="150.0">
            <items>
                <FXCollections fx:factory="observableArrayList">
                    <String fx:value="Java" />
                    <String fx:value="JavaScript" />
                    <String fx:value="C#" />
                    <String fx:value="Python" />
                </FXCollections>
            </items>
        </ComboBox>
        <ChoiceBox fx:id="fgh" layoutX="14.0" layoutY="70.0" prefWidth="150.0">
            <items>
                <FXCollections fx:factory="observableArrayList">
                    <String fx:value="Java" />
                    <String fx:value="JavaScript" />
                    <String fx:value="C#" />
                    <String fx:value="Python" />
                </FXCollections>
            </items>
        </ChoiceBox>
    </children>
</AnchorPane>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...