Java 用回车键传递字段?
我正在寻找一种在VerticalLayout或其他应用程序中使用enter键传递字段的方法。在vaadin的书中,有一个带有快捷方式和处理程序侦听器的示例,但我不知道如何实现它 我正在试这个Java 用回车键传递字段?,java,frameworks,vaadin,vaadin7,Java,Frameworks,Vaadin,Vaadin7,我正在寻找一种在VerticalLayout或其他应用程序中使用enter键传递字段的方法。在vaadin的书中,有一个带有快捷方式和处理程序侦听器的示例,但我不知道如何实现它 我正在试这个 public class MyWindow extends Window implements Handler{ private Action action_enter; //pass fields with enter private Action action_esc; private TextFiel
public class MyWindow extends Window implements Handler{
private Action action_enter; //pass fields with enter
private Action action_esc;
private TextField name, lastName;
public MyWindow(){
super("this window is opened");
VerticalLayout vLayout = new VerticalLayout();
setContent(vLayout);
center();
setModal(true);
setClosable(false);
setDraggable(false);
setResizable(false);
//actions
action_enter = new ShortcutAction("Enter key", ShortcutAction.KeyCode.ENTER, null);
action_esc = new ShortcutAction("Esc key", ShortcutAction.KeyCode.ESCAPE, null);
addActionHandler(this);
//fields
name = new TextField("Name");
lastName = new TextField("Last name");
name.focus();
vLayout.addComponent(name);
vLayout.addComponent(lastName);
}
@Override
public Action[] getActions(Object target, Object sender) {
return new Action[] { action_enter, action_esc };
}
@Override
public void handleAction(Action action, Object sender, Object target) {
/** close window with esc key */
if(action == action_esc){
close();
}
/** pass fields with enter key */
if(action == action_enter){
//here pass fields with enter key
}
}
}
有什么想法吗?没有提供访问器的接口可以让您找到当前关注的组件。可以通过
com.vaadin.event.FieldEvents.FocusListener
和com.vaadin.event.FieldEvents.BlurListener
接口获取某些(但不是全部)字段组件的焦点信息
您可以为所有可能的字段添加一个FocusListener
,并记住每次调用时变量中的当前字段。(问题:并非所有字段都提供FocusListener。)然后,当按下ENTER键时,根据必须聚焦的当前聚焦字段(记住变量)聚焦下一个组件(借助简单列表、LinkedList、Map、switch case等)。为了使它更好地添加一个BlurListener
,并知道何时不聚焦下一个字段
希望对您有所帮助。使用ShortcutListener尝试以下方法:
ShortcutListener skEnterListener = new ShortcutListener("Enter", ShortcutAction.KeyCode.ENTER, null){
@Override
public void handleAction(Object sender, Object target) {
if (target instanceof VerticalLayout) { // VerticalLayout or other
// sending fileds here
}
}
};
addShortcutListener(skEnterListener);
使用“输入”选项卡更改文本字段的焦点:
final TextField tf1 = new TextField("tf1");
tf1.setId("tf1");
final TextField tf2 = new TextField("tf2");
tf2.setId("tf2");
ShortcutListener skEnterListener = new ShortcutListener("Enter", ShortcutAction.KeyCode.ENTER, null){
@Override
public void handleAction(Object sender, Object target) {
if (target instanceof TextField) {
TextField field = (TextField) target;
if ("tf1".equals(field.getId())) {
tf2.focus();
}
if ("tf2".equals(field.getId())) {
tf1.focus();
}
}
}
};
addShortcutListener(skEnterListener);
如何使用“回车”选项卡更改文本字段的焦点?