javafx combox实现输入内容,列表出现对应的数据

javafx combox实现输入内容,列表出现对应的数据_第1张图片

	@FXML
	private ComboBox noCombox;
    // 可编辑状态
	noCombox.setEditable(true);
	List studentNo = query.queryStudentInfoPrint();
	noCombox.getItems().add("请选择");
	noCombox.getItems().addAll(noList);
    AutoCompleteComboBoxListener auto = new AutoCompleteComboBoxListener<>(noCombox);

AutoCompleteComboBoxListener

public class AutoCompleteComboBoxListener implements EventHandler {

    private ComboBox comboBox;
    private StringBuilder sb;
    private ObservableList data;
    private boolean moveCaretToPos = false;
    private int caretPos;

    public AutoCompleteComboBoxListener(final ComboBox comboBox) {
        this.comboBox = comboBox;
        sb = new StringBuilder();
        data = comboBox.getItems();

        this.comboBox.setEditable(true);
        this.comboBox.setOnKeyPressed(new EventHandler() {

            @Override
            public void handle(KeyEvent t) {
                comboBox.hide();
            }
        });
        
        
        this.comboBox.setOnKeyReleased(AutoCompleteComboBoxListener.this);
    }

    @Override
    public void handle(KeyEvent event) {

        if(event.getCode() == KeyCode.UP) {
            caretPos = -1;
            moveCaret(comboBox.getEditor().getText().length());
            return;
        } else if(event.getCode() == KeyCode.DOWN) {
            if(!comboBox.isShowing()) {
                comboBox.show();
            }
            caretPos = -1;
            moveCaret(comboBox.getEditor().getText().length());
            return;
        } else if(event.getCode() == KeyCode.BACK_SPACE) {
            moveCaretToPos = true;
            caretPos = comboBox.getEditor().getCaretPosition();
        } else if(event.getCode() == KeyCode.DELETE) {
            moveCaretToPos = true;
            caretPos = comboBox.getEditor().getCaretPosition();
        }

        if (event.getCode() == KeyCode.RIGHT || event.getCode() == KeyCode.LEFT
                || event.isControlDown() || event.getCode() == KeyCode.HOME
                || event.getCode() == KeyCode.END || event.getCode() == KeyCode.TAB) {
            return;
        }

        ObservableList list = FXCollections.observableArrayList();
        for (int i=0; i

你可能感兴趣的:(javafx)