栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaFX中的自动完成组合框

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaFX中的自动完成组合框

我找到了一个对我有用的解决方案:

public class AutoCompleteComboBoxListener<T> implements EventHandler<KeyEvent> {    private ComboBox comboBox;    private StringBuilder sb;    private ObservableList<T> 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<KeyEvent>() { @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<data.size(); i++) { if(data.get(i).toString().toLowerCase().startsWith(     AutoCompleteComboBoxListener.this.comboBox     .getEditor().getText().toLowerCase())) {     list.add(data.get(i)); }        }        String t = comboBox.getEditor().getText();        comboBox.setItems(list);        comboBox.getEditor().setText(t);        if(!moveCaretToPos) { caretPos = -1;        }        moveCaret(t.length());        if(!list.isEmpty()) { comboBox.show();        }    }    private void moveCaret(int textLength) {        if(caretPos == -1) { comboBox.getEditor().positionCaret(textLength);        } else { comboBox.getEditor().positionCaret(caretPos);        }        moveCaretToPos = false;    }}

你可以用

new AutoCompleteComboBoxListener<>(comboBox);

基于此,我根据自己的需要对其进行了自定义。

随时使用它,如果有人可以改进它,请告诉我。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402410.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号