com.google.appinventor.client.widgets.LabeledTextBox.java Source code

Java tutorial

Introduction

Here is the source code for com.google.appinventor.client.widgets.LabeledTextBox.java

Source

// -*- mode: java; c-basic-offset: 2; -*-
// Copyright 2009-2011 Google, All Rights reserved
// Copyright 2011-2012 MIT, All rights reserved
// Released under the Apache License, Version 2.0
// http://www.apache.org/licenses/LICENSE-2.0

package com.google.appinventor.client.widgets;

import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
 * A TextBox with a leading label.
 *
 */
public class LabeledTextBox extends Composite {

    // Backing TextBox
    private final TextBox textbox;

    private String defaultTextBoxColor;
    private String errorMessage = "";
    private Label errorLabel;
    private Validator validator;

    /**
     * Creates a new TextBox with the given leading caption.
     *
     * @param caption  caption for leading label
     */
    public LabeledTextBox(String caption) {
        HorizontalPanel panel = new HorizontalPanel();
        Label label = new Label(caption);
        panel.add(label);
        textbox = new TextBox();
        textbox.setWidth("100%");
        panel.add(textbox);
        panel.setCellWidth(label, "40%");

        initWidget(panel);

        setWidth("100%");
    }

    /**
     * Use this TextBox if you want to have text validation while a user is typing
     *
     * @param caption    caption for leading label
     * @param validator  The validator to use for a specific textBox
     */
    public LabeledTextBox(String caption, Validator validator) {
        this.validator = validator;

        HorizontalPanel panel = new HorizontalPanel();
        Label label = new Label(caption);
        panel.add(label);
        textbox = new TextBox();
        defaultTextBoxColor = textbox.getElement().getStyle().getBorderColor();
        textbox.setWidth("100%");
        panel.add(textbox);
        panel.setCellWidth(label, "40%");

        HorizontalPanel errorPanel = new HorizontalPanel();
        errorLabel = new Label("");
        errorPanel.add(errorLabel);

        VerticalPanel vp = new VerticalPanel();
        vp.add(panel);
        vp.add(errorPanel);
        vp.setHeight("85px");

        initWidget(vp);

        setWidth("100%");
    }

    /**
     * Sets the content of the TextBox.
     *
     * @param text  new TextBox content
     */
    public void setText(String text) {
        textbox.setText(text);
    }

    /**
     * Returns the current content of the TextBox.
     *
     * @return  current TextBox content
     */
    public String getText() {
        return textbox.getText();
    }

    /**
     * Explicitly focus/unfocus this widget. Only one widget can have focus at a
     * time, and the widget that does will receive all keyboard events.
     *
     * @param focused  whether this widget should take focus or release it
     */
    public void setFocus(boolean focused) {
        textbox.setFocus(focused);
    }

    /**
     *  Selects all of the text in the TextBox.
     */
    public void selectAll() {
        textbox.selectAll();
    }

    /**
     * Sets whether the textbox is enabled.
     *
     * @param enabled  {@code true} to enable the textbox, {@code false} to
     *                 disable it
     */
    public void setEnabled(boolean enabled) {
        textbox.setEnabled(enabled);
    }

    /**
     * Returns the TextBox.
     *
     * @return  the TextBox
     */
    public TextBox getTextBox() {
        return textbox;
    }

    /**
     * Returns the error message resulting from a specific validation error
     *
     * @return errorMessage
     */
    public String getErrorMessage() {
        return errorMessage;
    }

    /**
     * Set the specific error message for invalid text in a textbox.
     *
     * @param errorMessage to use for textBox
     */
    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    /**
     * Check to see if a textbox contains valid text. True if text is valid, false otherwise
     *
     * @return validationResult
     */
    public boolean validate() {
        boolean validationResult = validator.validate(getTextBox().getValue());
        setErrorMessage(validator.getErrorMessage());
        setErrorStyles(validationResult);
        return validationResult;
    }

    /**
     * Set the style of the textbox depending on whether the text is currently valid or not
     *
     * @param validationResult
     */
    private void setErrorStyles(boolean validationResult) {
        if (validationResult) {
            textbox.getElement().getStyle().setBorderColor(defaultTextBoxColor);
            errorLabel.setText("");
        } else {
            String errorColor = "red";
            textbox.getElement().getStyle().setBorderColor(errorColor);
            errorLabel.setText(errorMessage);
        }
    }
}