2013-11-28 5 views
8

में एंटर कुंजी प्रेस का पता लगाने के लिए कैसे मैं एक वैडिन टेक्स्टएरिया का उपयोग किसी न किसी कंसोल के रूप में कर रहा हूं। उपयोगकर्ता आदेश दर्ज कर सकता है जिसे एंटर कुंजी दबाते समय निष्पादित किया जाना चाहिए। क्या TextArea पर श्रोता के साथ इसे निर्दिष्ट करने का कोई तरीका है?वैडिन टेक्स्टएरिया

TextArea textArea = new TextArea(); 
textArea.addTextChangeListener(this); 
textArea.setTextChangeEventMode(TextChangeEventMode.EAGER); 

और पाठ परिवर्तन घटना संभाल: जैसे ही

@Override 
public void textChange(TextChangeEvent event) { 
    System.out.println(event.getText()); 
} 

हालांकि यह शुरू हो रहा है के रूप में पाठ TextArea में दर्ज किया गया है

निकटतम बात मैंने पाया उपयोग करने के लिए है। मैं केवल तब अधिसूचित होना चाहता हूं जब एंटर कुंजी दबाया गया हो।

उत्तर

13

आप पाठ क्षेत्र पर ही कुंजी शॉर्टकट बात नहीं कर सकते, लेकिन एक सरल उपाय एक सबमिट बटन जोड़ने के लिए और दर्ज करें जिसका उपयोग के रूप में यह शॉर्टकट है करने के लिए होगा:

Button b = new Button("submit", new Button.ClickListener() { 
    @Override 
    public void buttonClick(ClickEvent event) { 
     // handle your event 
    } 
}); 
layout.addComponent(b); 
b.setClickShortcut(KeyCode.ENTER); 

आप बटन अपने आप को छुपा सकते हैं यदि आप डॉन ' टी यह इच्छा:

b.setVisible(false); 

एक अन्य समाधान ShortcutActions और हैंडलर उपयोग करने के लिए किया जाएगा यहाँ में वर्णित हैं: https://vaadin.com/book/-/page/advanced.shortcuts.html

लेकिन किसी भी मामले में आपको ध्यान रखना होगा कि कुंजी दर्ज करने के लिए सुनना टेक्स्टएरिया घटक का उपयोग करते समय एक संघर्ष का कारण बन जाएगा क्योंकि आपको टेक्स्टएरिया में अगली पंक्ति में जाने के लिए एक ही कुंजी का उपयोग करने की आवश्यकता है।

+0

दुर्भाग्य से यह समाधान अब काम नहीं करता है। देखें: https://github.com/vaadin/framework/issues/4341 – mjjaniec

3

आप इस तरह, TextArea करने के लिए एक ShortcutListener जोड़ सकते हैं:

TextArea textArea = new TextArea(); 
textArea.addShortcutListener(enter); 

अब तुम सिर्फ इस प्रकार कुछ ShortcutListener प्रारंभ करने के लिए है:

ShortcutListener enter = new ShortcutListener("Enter", KeyCode.ENTER, null) { 

     @Override 
     public void handleAction(Object sender, Object target) { 
      // Do nice stuff 
      log.info("Enter pressed"); 
     } 
    }; 
+0

मैं केवल श्रोता को ध्यान में रखते हुए केवल श्रोता को जोड़ने का सुझाव दूंगा। आप इसे जोड़ने के लिए फोकस श्रोता का उपयोग कर ऐसा कर सकते हैं और इसे हटाने के लिए एक ब्लर श्रोता। –

0

इसके लिए हमें उपयोगिता समारोह निम्न का उपयोग

/** 
* Perform the specified action when the text field has focus and `ENTER` is pressed. 
* 
* @param tf The {@link com.vaadin.ui.TextField text field} or 
* {@link com.vaadin.ui.TextArea text area) 
* @param action The action to perform 
*/ 
public static void onKeyEnter(AbstractTextField tf, Consumer<AbstractTextField> action) { 
    tf.addFocusListener(event -> { 
     final Registration r = tf.addShortcutListener(
      new ShortcutListener("Enter", KeyCode.ENTER, null) { 

       @Override 
       public void handleAction(Object sender, Object target) { 
        // sender: UI, target: TextField 
        assert target == tf; 
        action.accept(tf); 
       } 
      }); 
     tf.addBlurListener(e -> r.remove()); 
    });   
} 

इसका इस्तेमाल करने के लिए:

final TextField searchField = new TextField(); // or TextArea 
searchField.setPlaceholder("Search text (ENTER)..."); 
// .. 
onKeyEnter(searchField, tf -> doSearch(tf.getValue())); 
संबंधित मुद्दे