自定义编辑字段不显示所有键入的文本

时间:2011-03-18 17:13:44

标签: blackberry blackberry-editfield

下面是一个文本框字段。这可以修改,以便当文本框中填充文本并且用户保持键入文本然后滚动?现在发生的事情是,一旦文本框中填充了文本,任何后续输入的文本都不会显示。

由于

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

}

1 个答案:

答案 0 :(得分:1)

这将有助于您入门。它是我正在使用的ScrollableEditField的简化版本。我在触摸BlackBerry设备可用之前对其进行了编码,因此这里需要一些额外的工作来支持TouchEvent

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