#javafx
#javafx
Вопрос:
ComboBox
и CheckBox
внутри него находится элемент set https://ibb.co/7YWQfLh , но не отображают содержимое этого элемента https://ibb.co/Mfy2mZb
Я создаю поля в разных панелях ( HBox
, VBox
AnchorPane
, GridPane
,, , ,), результат тот же. Я использовал Enum и обычную строку и результат тот же.
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>
Что не так. Я хочу этот результат.
Ответ №1:
Ваше поле со списком и поле выбора уже существуют, если они должны корректировать 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 (который вы хотите иметь).
Надеюсь, это поможет 🙂
Комментарии:
1. Я не уверен, почему я не написал .setItems вместо этого, спасибо, Фабиан, я обновил свой ответ. Что касается ObservableList, я более или менее просто воспользовался тем, что у него было. Возможно, я ответил слишком быстро, но я позволю ему решить, нужен ли ему наблюдаемый список или нет по какой-либо причине.
Ответ №2:
В качестве альтернативы тому, что сказал Роберт, если вы хотите, чтобы в вашем проекте было меньше кода, вы можете добавить элементы в 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>
Комментарии:
1. Это интересно, я такого раньше не видел! Я все еще новичок в JavaFX и просто пытаюсь ответить на некоторые небольшие вопросы здесь и там, на которые, я думаю, я могу ответить. На этот раз я тоже кое-что узнал.