2
빈 생성자를 제공하지 않기 때문에 사용자 정의 FilterComboBox를 사용할 때 NochSuchMethodException이 발생하기 때문에 문의하고 있습니다. 생성자는 확장 콤보 박스의 항목을 기대합니다.java FXML의 사용자 정의 확장 콤보 박스에 항목 컬렉션 제공
콤보 상자 컨트롤 :
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
public class FilterComboBoxTB extends ComboBox<String> {
\t
\t private ObservableList<String> initialList;
\t
\t public FilterComboBoxTB(ObservableList<String> items) {
super(items);
super.setEditable(true);
this.initialList = items;
this.configAutoFilterListener();
}
\t
\t private void configAutoFilterListener() {
\t \t final FilterComboBoxTB currentInstance = this;
this.getEditor().textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
\t final TextField editor = currentInstance.getEditor();
final String selected = currentInstance.getSelectionModel().getSelectedItem();
\t if (selected == null || !selected.equals(editor.getText())) {
\t \t filterItems(newValue, currentInstance);
\t currentInstance.show();
\t }
\t
}
});
}
\t
private void filterItems(String filter, ComboBox<String> comboBox) {
\t ObservableList<String> filteredList = this.readFromList(filter, initialList);
comboBox.setItems(filteredList);
}
\t
\t private ObservableList<String> readFromList(String filter, ObservableList<String> originalList) {
ObservableList<String> filteredList = FXCollections.observableArrayList();
for (String item : originalList) {
\t if (item.toLowerCase().indexOf(filter.toLowerCase())>-1) {
\t \t filteredList.add(item);
}
}
return filteredList;
}
}
FXML-Datei :
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.control.Label?>
<?import presentation.controls.FilterComboBoxTB?>
<BorderPane>
\t <top>
<FilterComboBoxTB **Method="GetItemsToPassToConstructor()"** />
</top>
<center>
<Label text="Some data here"/>
</center>
</BorderPane>
내가 할 수있는 FXML의 방법을 지정하려면 어떻게 관련 매개 변수를 얻으시겠습니까? 감사합니다.
제안 된 솔루션에 대해 감사드립니다. 마지막으로 리팩토링을 종료했습니다. 매개 변수화 된 생성자를 빈 생성자로 바꾸고 super.setItems (items)를 호출하는 initialize 메소드를 제공했습니다. 그러나 JavaFX 8의 솔루션을 알고 있으면 좋습니다. – wuz