我在JavaFX应用程序中使用Spinner组件。它是通过FXML创建的:
<Spinner fx:id="spinner" editable="true" min="0" max="100"
initialValue="3" />
根据Spinner的文件:
键盘上/下箭头键也循环显示元素。
但是,当我单击微调器组件并按向上或向下时,只有文本字段中的光标位置发生变化,而不是微调器值。
是否可以让spinner组件按照JavaDoc中的描述在UP和DOWN上做出反应?
我已经尝试添加一个关键监听器来完成这项工作:
spinner.setOnKeyPressed(event -> {
switch (event.getCode()) {
case UP:
spinner.increment(1);
break;
case DOWN:
spinner.decrement(1);
break;
}
});
然而,只有当我按下UP或DOWN并结合控制键时才会调用此监听器,这不是很直观。有没有这种组合键的解决方案吗?
答案 0 :(得分:3)
我相信这是因为你的FXML中有editable="true"
。 spinner中的TextField将变为可编辑并拦截所有单击,因此您只需要在editorProperty()上设置Listener而不是spinner本身。像这样:
spinner.getEditor().setOnKeyPressed(event -> {
switch (event.getCode()) {
case UP:
System.out.println("++1");
spinner.increment(1);
break;
case DOWN:
System.out.println("--1");
spinner.decrement(1);
break;
}
});