Pregunta

A continuación se encuentra un campo de cuadro de texto. ¿Se puede modificar esto para que cuando el cuadro de texto esté lleno de texto y el usuario mantenga el tipo de texto y luego se desplaza? Lo que sucede ahora es que una vez que el cuadro de texto está lleno de texto, no se muestra cualquier texto posterior que se escriba.

Gracias

import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.EditField;

public class CustomEditField extends EditField {
    // private members of the CustomEditField class
    private Font defaultFont;
    // used to get the default font
    private String text;

    // used to specify the default width of the table cells

    // constructor calls the super class constructor
    public CustomEditField(String label, String initialValue, int maxNumChars,
            long style) {
        super(label, initialValue, maxNumChars, style);
    }

    // overrides the default getPreferredWidth functionality to return a fixed
    // width
    public int getPreferredWidth() {
        defaultFont = Font.getDefault();
        text = "0000000000";
        return defaultFont.getAdvance(text);

    }

    // overrides the default layout functionality to set the width of the table
    // cell
    protected void layout(int width, int height) {
        width = getPreferredWidth();
        height = super.getPreferredHeight();
        super.layout(width, height);
        // uses the super class' layout functionality
        // after the width and the height are set
        super.setExtent(width, height);
        // uses the super class' setExtent functionality
        // after the width and the height are set
    }

    public void paint(Graphics graphics){

        graphics.setBackgroundColor(Color.LIGHTBLUE);
        super.paint(graphics);
    }

}
¿Fue útil?

Solución

Esto te ayudará a comenzar. Es una versión simplificada del ScrollableEditField que estoy usando. Lo codifiqué antes de que Touch BlackBerry Devices estuviera disponible, por lo tanto, se requiere un trabajo adicional aquí para admitir TouchEvents.

class ScrollableEditField extends Manager {
    private final static int        DEFAULT_TOP_PADDING     = 1;
    private final static int        DEFAULT_BOTTOM_PADDING  = 1;
    private final static int        DEFAULT_LEFT_PADDING    = 1;
    private final static int        DEFAULT_RIGHT_PADDING   = 1; 

    private int                     TOTAL_VERTICAL_PADDING  = DEFAULT_TOP_PADDING + DEFAULT_BOTTOM_PADDING;
    private int                     TOTAL_HORIZONTAL_PADDDING = DEFAULT_LEFT_PADDING + DEFAULT_RIGHT_PADDING;

    private int                     width  = -1;
    private int                     height = -1;

    private HorizontalFieldManager  hfm = new HorizontalFieldManager(HORIZONTAL_SCROLL);
    private EditField               ef;

    public ScrollableEditField(String label, String initialValue, int maxNumChars, long innerEditFieldStyle) {
        super(NO_HORIZONTAL_SCROLL);
        ef = new EditField(label, initialValue, maxNumChars, innerEditFieldStyle);
        hfm.add(ef);
        add(hfm);
    }

    protected void sublayout(int width, int height) {
        if (this.width != -1) {
            width = this.width;
        }

        if (this.height != -1) {
            height = this.height;
        } else {
            height = ef.getFont().getHeight();
        }

        layoutChild(hfm, width-TOTAL_HORIZONTAL_PADDDING, height-TOTAL_VERTICAL_PADDING);
        setPositionChild(hfm, DEFAULT_LEFT_PADDING, DEFAULT_TOP_PADDING);
        setExtent(width, height);
    }    

    public EditField getEditField() {
        return ef;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    protected void onFocus(int direction) {
        super.onFocus(direction);
        ef.setCursorPosition(0);
    }

    protected void onUnfocus() {
        hfm.setHorizontalScroll(0);
        super.onUnfocus();
    }
};

public class ScrollableEditFieldScreen extends MainScreen {
    public ScrollableEditFieldScreen() {
        super(NO_VERTICAL_SCROLL);
        setTitle("ScrollableEditField");

        // hfm1 and hfm2 are here just to position the ScrollableEditField in the center of the screen
        HorizontalFieldManager hfm1 = new HorizontalFieldManager(USE_ALL_HEIGHT | FIELD_HCENTER);
        HorizontalFieldManager hfm2 = new HorizontalFieldManager(FIELD_VCENTER);

        // instantiating the scrollable edit field and adding border
        ScrollableEditField sef = new ScrollableEditField("", "", 50, 0);
        sef.setBorder(BorderFactory.createRoundedBorder(new XYEdges(5,5,5,5)));
        sef.setWidth(sef.getFont().getAdvance('0')*10);

        hfm2.add(sef);
        hfm1.add(hfm2);
        add(hfm1);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top