Вы уверены, что код работает без ошибок? combomain
определено как List<String>
, что должно означать combomain.getItems()
, а combomain.setValue("")
приведет к ошибкам компиляции. Исходя из вашего файла FXML, это поле должно быть ComboBox<String>
. Однако, даже если вы исправите это, ваш initialize
метод не вызывается, и ваш combomain
также не вводится. С Введение в FXML :
Обратите внимание, что в предыдущих примерах поля элементов контроллера и методы обработчика событий были объявлены как открытые, поэтому они могут быть установлены или вызваны загрузчиком. На практике это не часто является проблемой, поскольку контроллер обычно виден только загрузчику FXML, который его создает. Однако для разработчиков, которые предпочитают более ограниченную видимость полей контроллера или методов-обработчиков, можно использовать аннотацию javafx.fxml.FXML
. Эта аннотация помечает защищенного или частного члена класса как доступный для FXML. Если аннотируемый класс находится в именованном модуле, модуль, содержащий этот класс, должен open
содержащий пакет по крайней мере для модуля javafx.fxml
.
Поскольку ваш метод initialize
не является public
, он должен быть помечен @FXML
, чтобы он мог быть замечен и вызван FXMLLoader
. То же самое с вашим combomain
полем; несмотря на наличие соответствующего fx:id
в файле FXML, оно не будет внедрено, поскольку поле имеет значение private
и не помечено @FXML
.
Ваш контроллер должен выглядеть так:
public class Controller {
@FXML
private ComboBox<String> combomain;
static String getData = "QueryHEre";
@FXML
void initialize() {
empnames = queryDatabase(getData);
String[] names = empnames.toArray(new String[0]);
combomain.getItems().addAll(names);
combomain.setValue("");
}
}
Однако , даже если все исправлено, все равно не будет работать, потому что вы не связали свой класс контроллера с файлом FXML. Как уже упоминалось в предыдущем разделе из Введение в FXML , один из способов сделать это - указать атрибут fx:controller
в корневом элементе файла FXML:
<!-- SOME ATTRIBUTES OMITTED FOR BREVITY -->
<Pane xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="sample.Controller">
<!-- OMITTED FOR BREVITY -->
</Pane>
Где sample.Controller
следует заменить на полное имя вашего класса контроллера. Если вы используете Scene Builder, вы можете установить контроллер, открыв панель с заголовком «Контроллер» в разделе «Документ» (левая панель).