При реализации класса Java ComboBoxListViewSkin для управления прослушивателем всплывающих окон моего ComboBox это добавляет «морковь» в верхний левый угол ComboBox (см. Ниже).Если я удаляю реализацию этого класса, она исчезает.Я использую прослушиватель всплывающих окон класса CombBoxListViewSkin, чтобы запретить [SPACE] выбирать и закрывать ComboBox при нажатии, что позволяет вводить символ [SPACE] как часть класса AutoComplete.
Это весь код, который используется для управления и позволяет [ПРОБЕЛУ] работать как часть класса AutoComplete - и отлично работает.Я пытался найти в классе ComboBoxListViewSkin методы или свойства, которые могут это предотвратить, но ничего не решает.Я подумал, что COMBO_BOX_STYLE_CLASS может предложить что-то, но на самом деле все управляет только отображением, добавлением или удалением элементов.Поскольку приведенный ниже код является минимальным необходимым для воссоздания проблемы, он не будет выполнять функцию автозаполнения, но демонстрирует, что удаление и повторная реализация класса ComboBoxListViewSkin вызывает проблему .... или, по-видимому,.
// Main method calling
public class Main extends Application{
public static void main(String[] args) {
launch();
}
public void start(Stage stage) throws Exception {
ComboBox cmb = new ComboBox();
cmb.getItems().setAll("One", "One Two", "One Two Three");
new ComboBoxAutoComplete(cmb);
Scene scene = new Scene(new StackPane(cmb));
stage.setScene(scene);
stage.setTitle("Test GUI");
stage.setWidth(300);
stage.setHeight(300);
stage.show();
}
}
// ComboBoxAutoComplete class with ComboBoxListViewSkin initialization
// Minimal of ComboBoxAutoComplete class constructor
import com.sun.javafx.scene.control.skin.ComboBoxListViewSkin;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.ComboBox;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import java.util.stream.Stream;
@SuppressWarnings("ALL")
public class ComboBoxAutoComplete<T> {
private ComboBox<T> cmb;
private String filter = "";
private ObservableList<T> originalItems;
private ComboBoxListViewSkin cbSkin;
public ComboBoxAutoComplete(final ComboBox<T> cmb) {
this.cmb = cmb;
originalItems = FXCollections.observableArrayList(cmb.getItems());
cbSkin = new ComboBoxListViewSkin(cmb);
// Aside from the variable declaration and initialization... this
// is the only ComboBoxListViewSkin code to handle the [SPACE]
cbSkin.getPopupContent().addEventFilter(KeyEvent.KEY_PRESSED, (event) -> {
if (event.getCode() == KeyCode.SPACE) {
filter += " ";
event.consume();
}
});
}
}
Я ожидаю, что ComboBox будет выглядеть как все остальные ComboBox в графическом интерфейсе приложения.Хотя это незначительная проблема, для пользователя, я полагаю, это может выглядеть как проблема с приложением.