Java 用回车键传递字段?

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

我正在寻找一种在VerticalLayout或其他应用程序中使用enter键传递字段的方法。在vaadin的书中,有一个带有快捷方式和处理程序侦听器的示例,但我不知道如何实现它

我正在试这个

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);

如何使用“回车”选项卡更改文本字段的焦点?