java-melwuitlwuit-resource-editor

LWUIT TextArea question


Is there any way to write in a textArea without going to a LCDUI window? I want to edit my textArea in my LWUIT app but everytime I try to do this, the app send me to a LCDUI window.


Solution

  • To disable the LWUIT edit control trigger you can use the following code.

    textArea.setNativeTextboxTrigger(false);
    

    You need to implement the following code in the LWUIT TextArea source code

    static final String CLIENT_PROPERTY_FIRE_ACTION_TIMES = "FIRE-ACTION-TIMES";
    static final String CLIENT_PROPERTY_DEAFULT_TEXT = "DEFAULT-TEXT";  
    
    
    public void setNativeTextboxTrigger(boolean enable) {
            registerNativeTextboxTriggerEvent = enable;
    
             static final String CLIENT_PROPERTY_FIRE_ACTION_TIMES = "FIRE-ACTION-TIMES";
                static final String CLIENT_PROPERTY_DEAFULT_TEXT = "DEFAULT-TEXT";          
            try {
                if( registerNativeTextboxTriggerEvent ) {
                    String text = null != ( text = getText() ) ? text : "";  
                    this.putClientProperty(CLIENT_PROPERTY_DEAFULT_TEXT, text);
                    this.putClientProperty(CLIENT_PROPERTY_FIRE_ACTION_TIMES, String.valueOf(0));
                    final UIManager m = UIManager.getInstance();
                    setNativeCommandsText(m.localize("ok", "OK"), m.localize("cancel", "Cancel"));
                    this.addActionListener(nativeTriggerListener = getNativeTriggerActionListener());
                } else {
                    this.putClientProperty(CLIENT_PROPERTY_DEAFULT_TEXT, null);
                    this.putClientProperty(CLIENT_PROPERTY_FIRE_ACTION_TIMES, null);
                    setNativeCommandsText(null, null);
                    if( null != nativeTriggerListener ) {
                        this.removeActionListener(nativeTriggerListener);
                        nativeTriggerListener = null;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    
    
    
           ActionListener getNativeTriggerActionListener() {
            return new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    if( evt.getSource() instanceof TextArea ) {
                        final TextArea tar = (TextArea)evt.getSource();
                        final String textEntered = tar.getText().trim();
                        final String defaultText = (String)tar.getClientProperty(CLIENT_PROPERTY_DEAFULT_TEXT);
                        int fireActionTimes = Integer.parseInt((String)tar.getClientProperty(CLIENT_PROPERTY_FIRE_ACTION_TIMES));
                        ++fireActionTimes;
                        int value = fireActionTimes % 2;
    
                        if( 0 == value ) {
                            fireActionTimes = 0;
                            if( textEntered.equals("") || textEntered.toUpperCase().equals(defaultText.toUpperCase())) {
                                tar.setText(defaultText);
                            }
                            triggeredNativeToLwuit(tar);
                        } else
                        //Switching to native edit screen
                        if( 0 < value ) {
                            if( textEntered.toUpperCase().equals(defaultText.toUpperCase()) ) {
                                tar.setText("");
                            }
                            triggeredLwuitToNative(tar);
                        }                   
                    }
                }
            };
        }