【发布时间】:2014-03-18 13:15:48
【问题描述】:
我在我的 JavaFX 应用程序中将 ENTER 实现为 TAB,这是用户的必需品。我正在使用以下代码来识别存在于Pane 中的所有Control 并添加OnKeyPressed 处理程序:
protected EventHandler<KeyEvent> processadorEnterEmCampo = new EventHandler<KeyEvent>() {
public void handle(final KeyEvent evento) {
if (evento.getCode() == KeyCode.ENTER) {
evento.consume();
((Node)evento.getSource()).fireEvent(new KeyEvent(evento.getSource(), evento.getTarget(), evento.getEventType(), null, "TAB", KeyCode.TAB, false, false, false, false));
}
}
};
private void adicionarProcessadorEventoEnterPressionado(Node elemento) {
if(elemento instanceof Pane){
Pane painel= (Pane) elemento;
for(Node filho :painel.getChildren()){
if(filho instanceof TextField || filho instanceof ComboBox || filho instanceof CheckBox
|| filho instanceof DatePicker || filho instanceof BigDecimalField)
filho.setOnKeyPressed(processadorEnterEmCampo);
else if(filho instanceof Button)
filho.setOnKeyPressed(processadorEnterEmBotao);
else
adicionarProcessadorEventoEnterPressionado(filho);
}
}
}
除了 BigDecimalField 和 DatePicker 之外,上面的代码运行起来就像一个魅力。当我按下 ENTER 键时,它根本不会运行处理程序的代码,只有当我按下 SHIFT 键时,才会执行处理程序的代码。我相信这种情况正在发生,因为这些组件已经具有一些带有 ENTER 键的功能。我可以做些什么来处理这些组件中的 ENTER 按键?
【问题讨论】:
标签: java event-handling datepicker javafx-8 jfxtras