【问题标题】:Javafx - How to prevent ComboBox hiding when spacebar pressed?Javafx - 如何防止按下空格键时隐藏组合框?
【发布时间】:2020-01-16 07:37:24
【问题描述】:

我有一个包含一长串项目的 JavaFx ComboBox。为了找到我想要的项目,当 ComboBox 下拉时,我开始输入部分描述并过滤包含我在 ComboBox 中显示的描述中键入的项目,并且 ComboBox 中的列表相应地缩小。这很好用。 但是,我希望能够在搜索字符串中包含一个空格键(空白),但只要我按下空格键,组合框就会隐藏。

我尝试添加一个事件过滤器,它确实捕获了空格键(和所有其他键),但在按下空格键时 ComboBox 隐藏自身之前没有。任何有关防止空格键导致 ComboBox 隐藏的建议将不胜感激。这是显示我尝试过的截断代码。

class MainController
{
    @FXML
    lateinit var cmbPwds: ComboBox<PwdItem>

    init {
        Platform.runLater {setKeyboardEvent()}
    }

    fun setKeyboardEvent() {
        cmbPwds.addEventFilter(KeyEvent.ANY) {event ->
            event.consume()
            if(event.eventType == KeyEvent.KEY_TYPED)
                print(if(event.character == " ") "BLANK" else event.character)
        }
    }
}

【问题讨论】:

标签: javafx kotlin combobox


【解决方案1】:

我不认为这完全回答了你的问题,但也许它会有所帮助。下面的代码使用空格字符,使组合框保持打开状态。

// import javafx.scene.control.skin.ComboBoxListViewSkin;
// ComboBox<T> comboBox;
ComboBoxListViewSkin<T> skin = new ComboBoxListViewSkin<>(comboBox);
skin.getPopupContent().addEventFilter(KeyEvent.ANY, e -> {
    if (e.getCode() == KeyCode.SPACE) {
        e.consume();
    }
});
comboBox.setSkin(skin);

【讨论】:

  • 为什么要重复另一个问题的答案?这样做没有贡献被称为..剽窃。问题未标记为重复的唯一原因可能是它是 kotlin:因此您可以通过将其他答案翻译成 ... kotlin 来增加价值;)
  • 我的错。不久前我遇到了同样的问题,只是直接从我的应用程序中复制了代码,因为我认为这会有所帮助。我很可能是从另一个问题中得到的。关于剽窃......你是在暗示人们可能会从 Stackoverflow 复制和粘贴代码吗?那简直是疯了! ;-) 谁会做这样的事情? goodreads.com/book/show/…
猜你喜欢
  • 2016-02-18
  • 2014-02-18
  • 2019-08-01
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多